-
Kafka Consumer 개념Kafka 2023. 9. 13. 17:14728x90반응형
- 목차
* 소개
Kafka Consumer 가 Kafka Broker 로부터 메시지를 읽어들이는 전반적인 과정을 설명하고자 합니다.
* partition - consumer
Kafka Producer 가 생성하는 메시지들은 Topic 의 여러 Partition 에 분산저장됩니다.
Kafka Consumer 가 특정 Topic 을 조회한다는 의미는 Topic 의 Partition 들을 개별조회하는 것을 뜻합니다.
만약 Topic A 의 Partition 이 4개라면 Kafka Consumer 들은 각각의 Partition 을 조회하게 됩니다.
그리고 Partition <-> Consumer 의 매칭의 대전제는 N : 1 으로 적용되어야 한다는 것인데요.
하나의 Partition 을 2개 이상의 Consumer 가 조회하는 것은 허용이 되지 않습니다.예를 들어보겠습니다.
// Partition 4개 & Consumer 1개 Topic A - Partition 1 <---> Consumer 1 Topic A - Partition 2 <---> Consumer 1 Topic A - Partition 3 <---> Consumer 1 Topic A - Partition 4 <---> Consumer 1 // Partition 4개 & Consumer 2개 Topic A - Partition 1 <---> Consumer 1 Topic A - Partition 2 <---> Consumer 1 Topic A - Partition 3 <---> Consumer 2 Topic A - Partition 4 <---> Consumer 2 // Partition 4개 & Consumer 4개 Topic A - Partition 1 <---> Consumer 1 Topic A - Partition 2 <---> Consumer 2 Topic A - Partition 3 <---> Consumer 3 Topic A - Partition 4 <---> Consumer 4
만약 Partition 의 수보다 Consumer 가 많아지면, idle 상태의 Consumer 가 생겨납니다.
그렇기 때문에 Partition 의 갯수가 Consumer 의 Upper Limit 으로 동작합니다.// Partition 4개 & Consumer 6개 Topic A - Partition 1 <---> Consumer 1 Topic A - Partition 2 <---> Consumer 2 Topic A - Partition 3 <---> Consumer 3 Topic A - Partition 4 <---> Consumer 4 Consumer 5 (Consume X) Consumer 6 (Consume X)
* Consumer Group
효율와 안전성의 측면에서 카프카는 토픽을 여러 파티션으로 나누게 됩니다.
그렇게 함으로써 필연적으로 하나의 Topic 을 조회하는 Kafka Consumer 의 수는 2개 이상이 됩니다.
이렇게 하나의 Topic 을 바라보는 Kafka Consumer 들을 논리적으로 연결짓게 되는데, 이를 Consumer Group 이라고 합니다.
Consumer Group 을 관리하기 위해서 Consumer Leader 와 Group Coordinator 의 상호작용이 필요합니다.
아래에서 Consumer Leader 와 Group Coordinator 의 설명을 이어가겠습니다.* Consumer Leader
Consumer Group 은 Consumer 들의 체계적인 관리를 위하여 Consumer Leader 를 필요로합니다.
Consumer Leader 는 Consumer Group 에 속한 Consumer 들 중 하나를 의미합니다.
특정 Consumer Group 에 등록된 최초의 Consumer 가 Leader 의 자격을 부여받습니다.
Consumer Leader 는 Consumer 로써의 역할 뿐만 아니라 Leader 로써의 역할도 수행해야하는데요.
Leader 의 역할은 Topic 의 Partition 와 Consumer 의 매칭시키는 작업입니다.
이 과정을 Partition Assignment 라고 하는데요.
Consumer Leader 는 Partition Assignment 를 위해서 Group Coordinator 와 통신을 수행합니다.
Group Coordinator 는 아래에서 자세히 설명하겠지만, Kafka Broker 중 하나를 의미합니다.
Kafka Consumer 들이 bootstrap.servers 와 topic, group.id 정보를 가지고 최초 실행이 되면,
Kafka Consumer 는 Kafka Broker 에게 group.id 에 해당하는 Consumer Group 에 Join 하겠다는 요청을 보내게 됩니다.
이를 JoinGroup Request 하고 합니다.
Kafka Broker 는 group.initial.rebalance.delay.ms 로 설정된 시간만큼 모든 Kafka Consumer 들의 JoinGroup Request 들을 받아들입니다.
( group.initial.rebalance.delay.ms 의 default 값은 3000ms 입니다. )
이렇게 group.initial.rebalance.delay.ms 동안에 요청된 JoinGroup Request 들을 토대로 Consumer Group 이 생성됩니다.
그리고 첫번째로 Consumer Group 에 Join 된 Kafka Consumer 가 Consumer Leader 가 됩니다.
Consumer Leader 는 Kafka Broker (Group Coordinator) 로 부터 Consumer Group 에 등록된 Running 상태의 Consumer 정보를 전달받고,
전달받은 Consumer 들을 기반으로 Partition Assignment 를 수행합니다.
그리고 Partition Assignment 의 결과를 Broker 에게 전달하며,
그 이후에 본격적인 Partition - Consumer 간의 데이터 조회가 실행됩니다.
(Consumer Leader 가 결정한 Partition Assignment 결과를 Kafka Broker (Group Coordinator) 에게 전달하는 것은 SyncGroup Request 라고 합니다. )
Consumer Leader 가 Partition 과 Consumer 간의 할당을 책임지는 것은 Client-Side Partition Assignment 라고 합니다.
자세한 문서의 내용을 위해 아래 링크를 첨부하였습니다.
<Client-Side Partition Assignment>
https://cwiki.apache.org/confluence/display/KAFKA/Kafka+Client-side+Assignment+Proposal* Group Coordinator
Group Coordinator 는 Kafka Broker 중에서 Group Coordinator 의 역할을 부여받은 Broker 입니다.
Group Coordinator 의 가장 큰 역할인 Kafka Consumer 들이 Topic 의 Partition 을 잘 조회할 수 있도록 도움을 주는데에 있습니다.
첫번째 역할은 JoinGroup Request 를 처리합니다.
Group Coordinator 는 Kafka Consumer 의 JoinGroup Request 를 받아 Consumer Group 을 생성하고
Consumer 들을 해당 Group 에 등록시킵니다.
그리고 Consumer Leader 를 지정하여 Leader 에게 구동 중인 Consumer 목록을 전달합니다.
Consumer Leader 는 전달받은 Consumer 목록를 통해 Partition Assignment 를 수행할 수 있습니다.
두번째 역할은 SyncGroup Request 를 처리합니다.
Consumer Leader 는 Partition 이 Assign 된 Consumer 정보를 Group Coordinator 에게 전달합니다.
Group Coordinator 은 Partition Assignment 정보를 토대로 각 Consumer 가 정상적으로 데이터를 조회할 수 있도록 합니다.
비로서 토픽의 데이터 조회가 시작됩니다.
세번째 역할은 Consumer 들의 heartbeat 를 수신하여 Consumer 의 running 상태 여부를 확인합니다.
heartbeat.interval.ms 에 설정된 시간을 주기로 Consumer 는 heartbeat 를 전달합니다.
이 과정에서 모종의 이유로 heartbeat 를 전달하지 못하는 Consumer 는 죽었다고 판단하며, Rebalancing 이 새롭게 수행됩니다.반응형'Kafka' 카테고리의 다른 글
Kafka Replication (메시지 복제) 이해하기 (0) 2023.09.21 kafka __consumer_offsets topic 이해하기 (0) 2023.09.18 Kafka Producer Process (카프카 프로듀서 과정) (0) 2023.09.09 kafka consumer (0) 2023.03.02 kafka producer (0) 2023.02.23