Kafka 로 Blue-Green 배포 도전기 - 2

Coding Turtle·2024년 9월 5일
post-thumbnail

kafka_logo

본 포스팅에서는 어떻게 하면 Kafka Consumer 를 Blue Green 배포 할 수 있을 지 에 대하여 공유합니다.

배포 환경 구성하기

1. Kafka Cluster 를 Blue Green 으로 구성하기

첫번째 방법은 Kafka Cluster 를 Blue 환경과 Green 환경으로 나누는 방법입니다. 이 방법은 Kafka Cluster 를 Blue Cluster 와 Green Cluster 로 구성하고 각각의 Cluster 에 붙는 Consumer 를 동시에 띄우는 방식입니다. 해당 방식으로 구성할 경우 KafkaProducer 에서 토픽에 데이터를 produce 할 때는 다음과 같이 도메인을 사용합니다.

  • kafka-cluster.domain.com

현재 배포 상황을 Blue 라고 가정합니다.
그렇다면 kafka-cluster.domain.com 호스트는 Blue Cluster 의 Vip 를 바라봅니다.
이 상태에서 KafkaProducer 가 kafka-cluster.domain.com 도메인을 통하여 데이터를 produce 할 경우 kafka-cluster.domain.com 는 Blue Cluster 의 Vip 를 바라보므로 Blue Cluster 로 data produce 를 합니다.
이 상황에서 특정 기능을 수정한 Kafka Consumer 를 배포한다고 합시다. 그럴 경우 다음과 같은 절차로 배포가 진행됩니다.

1) Green Consumer 를 모두 종료하고 신규 버전의 Kafka Consumer Application 을 실행 합니다. 어플리케이션이 신규 버전으로 재시작이 되었지만, 모든 데이터는 Blue Cluster 를 통해 처리되고 있기 때문에 현재 서비스에는 아무런 영향이 가지 않습니다.

2) Green Cluster 의 Consumer 를 모두 검증합니다.
3) kafka-cluster.domain.com 도메인이 바라보는 Vip 를 Green Cluster 의 Vip 로 설정합니다.

4) Kafka producer 에서는 이제 Green Cluster 로 데이터를 Produce 합니다.

이런 방식으로 Blue Green 배포 환경을 구성할 수 있습니다.

해당 방식의 문제점

그러나 해당 방식에는 치명적인 문제점이 있습니다.

  • Kafka Cluster 를 두개를 구성: Kafka Cluster 를 두가지를 동시에 구성하는 것이 비용상 부담이 될 수 있습니다.
  • Kafka Consumer 앱이 두개 이상인 경우: 만약 배포 형상이 관리되어야 하는 Kafka Consumer Application 이 두개 이상인 경우 해당 방법은 쓸 수 없습니다.

따라서, 다른 방법을 모색해봅시다.

2. Kafka Topic 을 Blue Green 으로 구성하기

두번째 방식은 Kafka Topic 자체를 두개 만들어버리는 방법입니다.
만약 기존에 sample-topic 이라는 이름의 토픽을 사용하고 있었다면 sample-topic-blue, sample-topic-green 토픽으로 분리합니다.
그리고 각각의 topic 을 바라보는 consumer 를 각각 생성합니다.

Kafak Producer 에서는 데이터를 produce 하기 전 현재 배포된 어플리케이션 형상을 확인합니다. 현재 어플리케이션 형상이 blue 일 경우 sample-topic-blue topic 으로, green 일 경우 sample-topic-green 토픽으로 데이터를 produce 합니다.
이 상황에서 특정 기능을 수정한 Kafka Consumer 를 배포한다고 합시다. 그럴 경우 다음과 같은 절차로 배포가 진행됩니다.

1) Green Consumer 를 모두 종료하고 신규 버전의 Kafka Consumer Application 을 실행합니다. 어플리케이션이 신규 버전으로 재시작이 되었지만, 모든 데이터는 Blue Topic 을 통해 처리되고 있기 때문에 현재 서비스에는 아무런 영향이 가지 않습니다.

2) Green Cluster 의 Consumer 를 모두 검증합니다.
3) 현재 Consumer 의 배포상태를 Green 으로 업데이트 합니다.
4) Consumer 배포 상태가 Green 이 되었으므로, Kafka producer 에서는 이제 Green Cluster 로 데이터를 Produce 합니다.

이렇게 구성할 경우 배포상태가 관리되어야 할 Consumer 의 개수가 여러 종류가 된다고 하더라도 별도로 모두 관리가 가능할 것입니다. 하지만 이러한 구성 방식은 아래와 같은 단점들을 가집니다.

1. 배포 관리 어플리케이션 필요: 별도로 Consumer 들의 배포 상태를 관리할 어플리케이션을 별도로 만들어야 하고,
2. 코드 삽입 필요: 어플리케이션의 Kafka Producer 코드에서 별도로 컨슈머의 배포 형상에 따라서 data 를 produce 할 topic 을 분기하는 코드를 삽입해야 합니다.

1번과 같은 문제는 어쩔 수 없다고 하더라도 2번의 경우에는 KafkaProducer 를 확장한 모듈을 사용한다면 어느정도 해소할 수 있을 것 같습니다.

다음 포스팅에서는 제가 직접 구현한 Kafka BlueGreen 라이브러리를 소개합니다.

profile
고민을 많이 할지도 모르는 Backend Software Engineer 입니다.

0개의 댓글