-
[Kafka] - 5. Consumer개발/Kafka 2022. 8. 4. 17:02
Consumer
고유의 속도로 Commit log에서 순서대로 Poll(Read를 수행)
Consumer Offeset
Consumer가 데이터를 읽을 위치를 Commit하여 다시 읽음을 방지한다.
Topic_Consumer_offset
Kafka internal Topic data로, Consumer의 offset의 위치를 저장하여 둔 공간이다.
- 아래 그림을 보면, Group A의 초록색의 Consumer는 현재 2번까지 read를 한 뒤, 3번을 commit한다.
- 이러한 Offset 정보는 Topic__consumer_offset이라는 Kafka internal 공간에 저장된다.
- Group B에서 각 Consumer는 서로 다른 Partition의 Offset 정보를 가지고 있다.
- 이를 각각의 Data로 Offset 정보로 저장되는 예시이다.
Topic __consumer_offsets Multi-partitions with single Consumer
- Consumer Group 내에 Consumer가 한개, Consumer가 모든 Partition의 offset정보를 가지고 있는다.
- Consumer가 Topic의 Partition에 있는 모든 Record를 Consume한다.
Multi-partitions with multi Consumer
- 동일한 group.id로 구성된 Consumer들은 하나의 Consumer group
- Partition은 항상 Consumer Group 내에 하나의 Consumer에 의해서만 사용
- 각 Consumer들은 정확히 하나의 partition에서 record를 Consume한다.
- Consumer는 주어진 Topic내에서 0개 이상의 많은 Partition을 사용 가능
Multi-partitions with multi Consumer group
- Consumer들은 작업량을 어느정도 균등하게 처리하려고 한다.
- 동일한 Topic에서 Consume하는 여러 Consumer Group이 있을 수 있다.
- 다른 Consumer group의 Consumer들은 분리되어 독립적으로 동작한다.
Message Ordering
Message(Data)에 대해 순서보장
- Partition이 2개 이상인 경우에는 모든 Message(data)에 대해 전체 순서 보장이 불가하다.
- Partition을 1개로 구성하면, 순서는 보장이 되겠지만 병렬 처리 할 수가 없음으로 처리량이 저하된다.
파티션이 2개 이상으로 순서보장이 되지 않는다. 그렇다면 순서 보장을 해야 하는 경우가 얼마나 많을까?
-> 대부분의 경우 Key로 구분 할 수 있는 Message(data)에 순서 보장이 필요한 경우가 많다.
동일한 Key를 가진 Message(data)는 동일한 Partition에 전달하여 Key-level 순서를 보장하자(Multi Partition 가능)
위와 같은 이유로 운영 중에 Partition 갯수를 변경? 알고리즘 및 순서가 보장되지 않음으로 절대 하지 말아야 한다.
Message Ordering with key Cardinality
특정 Data set에서 Unique한 갯수
- Key cardinality는 Consumer Group에서 개별 Consumer가 수행하는 작업에 영향을 준다. (특정 Key만 계속 사용하여 특정 Partition에만 반복적으로 사용)
- Key 선택이 잘 못 된다면, 작업 부하가 고르지 않을 수 있다.
- Key는 Int, str 과 같이 단순 유형이 아니여도 된다.
- Key는 value와 마찬 가지로 Object 가 가능하다(Avro, Json .. )
- Partition 전체에 record를 고르게 배포하는 Key를 만들어야 한다.
Consumer Rebalancing
Consumer Failure라고 하며, 장애가 난 경우 실패한 Consumer를 대신하여 Partition에서 Data를 가져와 처리한다.
- Partition의 갯수와 Consumer의 갯수가 동일하면 이상적이다.
- Partition은 항상 Group 내에 하나의 Consumer에 의해서만 실행된다.
- Consumer는 0개 이상의 Partition을 사용 가능하다.
'개발 > Kafka' 카테고리의 다른 글
[Kafka] - 7. In sync Replicas (0) 2022.08.05 [Kafka] - 6. Replication (0) 2022.08.04 [Kafka] - 4. Producer (0) 2022.08.04 [Kafka] - 3. Broker&Zookeeper (0) 2022.08.03 [Kafka] - 2. Topic&Partition&Segment (0) 2022.08.03