[Kafka] Consumer Group

Consumer Group

카프카에서는 컨슈머 그룹이라는 개념이 있다. 이 컨슈머 그룹을 통해 메세지를 병렬로 처리할 수 있고 장애에도 빠르게 대응할 수 있다. 컨슈머 그룹과 토픽에는 다음과 같은 특징이 있다.

그룹별 오프셋 관리

토픽은 컨슈머 그룹별로 오프셋을 관리한다. 그렇기 때문에 하나의 토픽에서 서로 다른 컨슈머 그룹끼리 메세지를 가져갈 수 있다.

파티션과 컨슈머 그룹

토픽의 파티션을 나누게 되면 각각의 파티션은 개별적으로 오프셋을 관리한다. 그렇기 때문에 컨슈머 그룹내에 컨슈머들이 하나의 파티션을 맡아서 처리를 진행한다.

하나의 파티션을 맡는다는 개념이 중요하다. 예를들어 파티션이 3개로 나누어진 토픽에서 컨슈머 그룹 A의 컨슈머가 4개가 있을 때 running하는 컨슈머는 3개가 된다. 각각 하나의 파티션을 맡아서 처리하기 때문에 맡을 파티션이 없는 컨슈머는 대기하게 된다.

리벨런스

리벨런스은 컨슈머에 장애가 생겼을 때 빠르게 대응할 수 있는 방법이다. 예를들어 파티션이 3개로 구성된 토픽과 컨슈머가 4개로 구성된 컨슈머 그룹이 작업을 하고 있다고 가정하자. 작업을 수행하던 중 컨슈머1이 다운이 됬다. 이 상황에서 대기하고있던 컨슈머 4번이 컨슈머 1번이 작업하던 파티션의 소유권을 가져가게 된다. 이렇게 소유권이 이동하는것을 리벨런스라고 하며 리벨런스를 통해 컨슈머를 쉽게 추가하고 제거할 수 있어 높은 가용성과 확장성을 확보한다.

하지만 이런 리벨런스에도 단점이 존재한다. 리벨런스가 일어나게 되는 순간 해당 컨슈머 그룹은 메세지를 일시적으로 가져갈 수 없다. 그리고 리벨런스가 끝나게 되면 각자 소유권을 가진 파티션으로부터 메세지를 가져온다.

Author: Song Hayoung
Link: https://songhayoung.github.io/2020/07/17/kafka/ConsumerGroup/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.