
본 포스팅에서는 Kafka Consumer 을 운영해오면서 겪었던 다양한 배포 문제점들과 이로 인해 발생한 이슈들을 중심으로 논의해보고자 합니다. 기존 배포방식에 대한 문제들을 해결하기 위해 우리는 기존의 Recreate, Rolling 배포 방식의 한계점을 분석하고, 더 나은 배포 전략으로서 Blue Green 을 어떻게 하면 적용할 수 있을 지에 대한 저의 생각과 해결방법을 공유하고자 합니다.
Kafka는 대용량의 실시간 로그 및 이벤트 데이터를 처리하는 데 널리 사용되는 분산 스트리밍 플랫폼입니다. Kafka Consumer는 이러한 데이터 스트림을 읽어 처리하는 역할을 합니다. 다양한 애플리케이션에서 Kafka Consumer를 사용하여 Producer-Consumer 모델을 구현할 수 있습니다.

Kafka Consumer와 같은 컴포넌트를 배포할 때는 서비스의 안정성과 가용성을 유지하는 것이 매우 중요합니다. 배포 과정에서 서비스 중단이나 데이터 손실이 발생할 경우, 비즈니스에 큰 영향을 미칠 수 있습니다. 따라서, 안정적이고 효율적인 배포 방식을 선택하는 것은 매우 중요합니다.
일반적으로 애플리케이션을 배포할 때는 Recreate, Rolling 등의 배포 방식을 사용합니다. 이 방법들도 충분히 Kafka Consumer 를 배포하기에 좋은 방법들입니다. 그러나 이러한 방식들은 몇 가지 단점과 이슈를 가지고 있어, 실제 운영환경에서 부담없이 배포하기에는 부담스러운 것이 사실입니다. 먼저 각 배포 방식과 각 문제점에 대해서 살펴보도록 하겠습니다.

Recreate 배포 방식은 기존 애플리케이션 인스턴스를 모두 종료한 후, 새로운 인스턴스를 생성하는 방식입니다.

Rolling 배포 방식은 기존 인스턴스를 하나씩 교체하면서 새로운 인스턴스를 배포하는 방식입니다. 해당 방식은 Recreate 방식에 비해 중단포인트가 최소화된다는 장점이 있지만 다음과 같은 문제점이 있습니다.
저는 위에서 명시된 이슈들이 시스템 가용성과 안정성에 적지 않은 영향을 줄 수 있음을 경험을 통해 알게 되었습니다. 데이터의 일관성이 무너지는 문제는 대부분 배포시점에 발생합니다. 그렇다면 이상적인 배포는 어떤 요건들을 갖추어야 할까요?
Blue Green 배포 방식은 두 개의 환경(Blue와 Green)을 운영하여, 배포 과정에서의 위험을 최소화하는 방식입니다. 현재 운영 중인 환경(Blue)을 유지하면서, 새로운 버전의 애플리케이션을 다른 환경(Green)에 배포하고, 검증 후 트래픽을 전환하는 방식입니다. 해당 방식은 배포 시 Downtime 이 발생하지 않으며, 배포와 롤백의 전환이 자유롭고, Blue 와 Green 배포 환경이 격리되어 서로 영향을 주지 않습니다.
그럼 Kafka 에서 블루-그린 배포를 어떻게 적용할 수 있을까요?

일반적으로 API 서버에서는 위 그림과 같이 두개의 환경을 구성하고 인입되는 트래픽을 Load Balancer 를 통해 Blue-Green 전환하는 방식으로 구현이 되어있습니다. 이런 구조를 Kafka Consumer 에서도 적용하여 Blue-Green 배포 환경을 구성할 수 있을 것입니다.
다음포스팅에서는 Blue Green 배포를 어떻게 구현할 지에 대하여 포스팅 하겠습니다.