728x90
Consuming from Kafka

- Consumer는 각각 고유의 속도로 CommitLog로부터 순서대로 Read(Poll)를 수행
- 다른 ConsumerGroup에 속한 Consumer들은 서로 관련이 없으며, CommitLog에 있는 Event(Message)를 동시에 다른 위치에서 Read할 수 있음
Consumer Offset
Consumer Group이 읽은 위치를 표시한다.

- Consumer가 자동이나 수동으로 데이터를 읽은 위치를 commit하여 다시 읽음을 방지한다.
- __consumer_offsets라는 InternalTopic에서 ConsumerOffset을 저장하여 관리한다.
Multi-Partitions with Single Consumer

- 4개의 Partition으로 구성된 Topic의 데이터를 사용하는 Single Consumer가 있는 경우, 이 Consumer는 Topic의 모든 Partition에서 모든 Record를 Consume 한다.
- 하나의 Consumer는 각 Partition에서의 Consumer Offset을 별도로 유지(기록) 하면서 모든 Partition에서 Consume한다.
Consuming as a Group
동일한 group.id로 구성된 모든 Consumer들은 하나의 Consumer Group을 형성

- 동일한 그룹을 파티션을 만들어 consumer에 뿌려 주기만 하면 알아서 파티션 그룹을 만든다.
- 4개의 파티션이 있는 Topic를 consume 하는 4개의 Consumer가 하나의 Consumer Group에 있다면, 각 Consumer는 정확히 하나의 Partition에서 Record를 consume 한다.
- Partition은 항상 ConsumerGroup내의 하나의 Consumer에 의해서 만사용됨
- Consumer는 주어진 Topic에서 0개 이 상의 많은 Partition을 사용할 수 있음
Multi Consumer Group

- 동일한 group.id로 구성된 모든 Consumer들은 하나의 ConsumerGroup을 형성한다.
- ConsumerGroup의 Consumer들은 작업량을 어느정도 균등하게 분할한다.
- 동일한 Topic에서 consume하는 여러 ConsumerGroup이 있을 수 있다
Key를 사용하면 Partition별로 동일한 Key를 가지는 메시지 저장

- key를 사용하면 Partitioner가 Patition 번호를 정해 Topic에 데이터를 보내게 된다
Message Ordering(순서)

- Partition이 2개 이상인 경우 모든 메시지에 대한 전체 순서보장 불가능
- Partition을 1개로 구성하면 모든 메시지에서 전체 순서보장 가능 ‒ 처리량 저하(병렬 처리가 안된다.)
- Partition을 1개로 구성해서 모든 메시지에서 전체 순서보장을 해야 하는 경우가 얼마나 많을까?
Message Ordering(순서) - 정확한 판단이 필요

- Partition을 1개로 구성해서 모든 메시지에서 전체 순서보장을 해야하는 경우가 얼마나 많을까?
- 특정 사용자가 어떤 상품을 조회했는지 알고 싶다고 가정한다면, 사용자 전체에서, 어떤 데이터를 보고 있는지 순서를 보장해야할까??
- 대부분의 경우, Key로 구분할 수 있는 메시지들의 순서보장이 필요한 경우가 많다.
Message Ordering(순서) - Key를 사용하여 Partition별 메시지 순서 보장

- 동일한 Key를 가진 메시지는 동일한 Partition에만 전달되어 Key레벨의 순서 보장가능
- 멀티 Partition 사용 가능 = 처리량 증가
- 운영중에 Partition개수를 변경하면 어떻게 될까?
- 순서보장불가
- partition을 선택하는 알고리즘에 Partition을 기준으로 hash를 나누기 떄문
Cardinality 특정 데이터 집합에서 유니크(Unique)한 값의 개수

- Key Cardinality는 Consumer Group의 개별 Consumer가 수행하는 작업의 양에 영향
- Key 선택이 잘못되면 작업 부하가 고르지 않을 수 있다
- Key는 Integer, String 등과 같은 단순한 유형일 필요가 없다
- Key는 Value와 마찬가지로 Avro, JSON 등 여러필드가 있는 복잡한 객체일수있다.
- 따라서, Partition 전체에 Record를 고르게 배포하는 Key를 만드는 것이 중요하다.
Consumer Failure Consumer Rebalancing

- 4개의 파티션이 있는Topic를 consume하는 4개의 Consumer가 하나의 Consumer Group에 있다면, 각 Consumer는 정확히 하나의 Partition에서 Record를 consume한다.
- Partition은 항상 ConsumerGroup내의 하나의 Consumer에 의해서만 사용된다.
- Consumer는 주어진 Topic에서 0개 이상의 많은 Partition을 사용할 수 있다.

- ConsumerGroup 내의 다른 Consumer가 실패한 Consumer를 대신하여 Partition에서 데이터를 가져와서 처리한다.
- Partition은 항상 ConsumerGroup내의 하나의 Consumer에 의해서만 사용된다.
- Consumer는 주어진 Topic에서 0개 이상의 많은 Partition을 사용할 수 있다.
정리
- Consumer가 자동이나 수동으로 데이터를 읽은 위치를 commit하여 다시 읽음을 방지
- __consumer_offsets라는 InternalTopic에서 ConsumerOffset을 저장하여 관리
- 동일한 group.id로 구성된 모든 Consumer들은 하나의 ConsumerGroup을 형성
- 다른 ConsumerGroup의 Consumer들은 분리되어 독립적으로 작동
- 동일한 Key를 가진 메시지는 동일한 Partition에만 전달되어 Key레벨의 순서 보장가능
- Key 선택이 잘못되면 작업 부하가 고르지 않을 수 있음
- ConsumerGroup내의 다른 Consumer가 실패한 Consumer를 대신하여 Partition에서 데이터를 가져와서 처리함
728x90
'Kafka 완전 정복 : 클러스터 구축부터 MSA 환경 활용까지 > 기본,심화 개념, 아키텍처와 생태계' 카테고리의 다른 글
| Ch01. Apache Kafka 기본 개념 및 이해 - In-Sync Replicas (0) | 2023.03.29 |
|---|---|
| Ch01. Apache Kafka 기본 개념 및 이해 - Replication (0) | 2023.03.29 |
| Ch01. Apache Kafka 기본 개념 및 이해 - Producer (0) | 2023.03.28 |
| Ch01. Apache Kafka 기본 개념 및 이해 - Broker, Zookeeper (0) | 2023.03.20 |
| Ch01. Apache Kafka 기본 개념 및 이해 - Topic, Partition, Segment (0) | 2023.03.19 |