카프카의 컨슈머 그룹
- Coding/Apache Kafka
- 2020. 12. 20.
컨슈머 그룹
카프카에는 프로듀서가 전달한 데이터를 저장하는 데이터 저장소인 토픽이 있다. 컨슈머는 해당 토픽에서 데이터를 가져오는데, 여러 컨슈머들은 컨슈머 그룹을 이루어 동시에 접속하여 메시지를 가져올 수 있다.
프로듀서가 토픽에 보내는 메시지 속도가 갑자기 증가하게되어, 컨슈머가 처리하지 못한 메시지들이 생기게된다. 해당 메시지들을 가져오는 컨슈머를 확장할 필요성이 생겼다. 만약 컨슈머만 확장한다면 기존과 신규 컨슈머의 오프셋(데이터의 저장 위치; 파티션별로 유니크한 순차적인 증가값을 위치로 가진다)가 뒤섞이면서 메시지들이 뒤죽박죽 될 것이다.
이를 해결하기 위해 카프카는 동일한 토픽에 대해 여러 컨슈머가 메시지들을 가져갈 수 있도록 컨슈머 그룹의 기능을 제공한다.
컨슈머 리밸런스
컨슈머 그룹 안에서 컨슈머들은 메시지를 가져오고 있는 토픽의 타피션에 대해 소유권을 공유한다. 컨슈머 그룹에 신규로 컨슈머가 추가된다면 파티션의 소유권들의 이동이 발생하는데, 이러한 현상을 리밸런스(rebalance)라고 한다. 리밸런스가 발생하게 되면 토픽의 각 파티션마다 하나의 컨슈머가 연결되고, 리밸런스가 끝나게되면 컨슈머들은 각자 연결된 파티션으로부터 메시지를 가져오게된다.
하트비트
컨슈머가 컨슈머 그룹 안에서 멤버로 유지하고 할당된 파티션의 소유권을 유지하는 방법은 하트비트를 보내는 것이다. 하트비트는 컨슈머가 poll 할때와 가져간 메시지의 오프셋을 커밋할때 보내게 된다. 만약 오랫동안 하트비트를 보내지 않으면 세션은 타임아웃 되고 해당 컨슈머가 다운되었다고 판단하여 리밸런스가 시작된다.
리밸런스의 단점
리밸런스를 하는 동안 일시적으로 컨슈머는 파티션으로부터 메시지를 가져올 수 없다. 리밸런스가 발생하면 컨슈머 그룹 전체가 일시적으로 사용할 수 없다.
카프카에서는 하나의 파티션에 하나의 컨슈머만 연결이 가능하다. 2개의 파티션이 하나의 동일한 컨슈머와 연결이 가능하다.
파티션:컨슈머 = N:1
컨슈머 그룹간의 연결
카프카에서는 컨슈머가 메시지를 가져가도 삭제하지 않고 일정 주기동안 유지한다고 하였다. 따라서 어떤 컨슈머가 가져간 메시지를 다른 컨슈머가 가져와서 다른 용도로 사용이 가능하다. 컨슈머 그룹끼리 연결되어 메시지를 가져가는 구조가 가능하다.
여러 컨슈머 그룹들이 하나의 토픽에서 메시지를 가져갈 수 있는 이유는?
컨슈머 그룹마다 각자의 오프셋을 별도로 관리하여 하나의 토픽에 여러 컨슈머 그룹이 연결되어도 다른 컨슈머 그룹에 영향 없이 메시지를 가져갈 수 있기 때문이다.
'Coding > Apache Kafka' 카테고리의 다른 글
SpringBoot + Docker Kafka 연동하여 Producer, Consumer 설정하여 Message 주고받기 (0) | 2021.06.15 |
---|---|
카프카의 오프셋과 커밋 (0) | 2020.12.20 |
카프카의 리플리케이션 관리 (0) | 2020.12.20 |
카프카의 토픽과 파티션, 오프셋 (0) | 2020.12.20 |
카프카의 기능 (0) | 2020.12.20 |