-
[Kafka] 11. Parition Assignment Strategy개발/Kafka 2022. 8. 9. 15:37
Parition Assignment Strategy
Conumser의 설정 파리미터 중에서 partition.assingment.strategy로 할당 방식을 조정할 수 있다.
- org.apache.kafka.clients.consumer.RangeAssignor : Topic별로 작동하는 Default Assignor
- org.apache.kafka.clients.consumer.RoundRobinAssignor : Round Robin 방식으로 Consumer에게 Partition을 할당한다.
- org.apache.kafka.clients.consumer.StickyAssginor : 최대한 많은 기존 Partition 할당을 유지하면서 최대 균형을 이루는 할당을 보장한다.
- org.apache.kafka.clients.consumer.CooperativeStickyAssignor : 동일한 StickyAssignor 논리를 따르지만 협력적인 Rebalance를 허용한다.
- org.apache.kafka.clients.consumer.ConsumerPartitionAssginor : 인터페이스를 구현하면 사용자 지정 할당 전략을 사용할 수 있다.
1. Range Assignor
partition.assingment.strategy의 Default Option
동일한 Key를 가지고 있는 Message들에게 Co-partitioning하기에 유리하다.
Range Assignor 2. Round Robin Assignor
OS scheduling의 Round Robin 알고리즘과 동일하게 동작
- Consumer에게 순서대로 할당한다.
- 이로 인해 할당 불균형이 발생 가능
- Reassign(재할당) 후 Consumer가 동일한 Partition을 유지한다는 보장이 없다.
ex) Consumer 0이 지금 Topic0의 Partiton0에 할당되어 있지만 재할당이 발생하면 Topic0의 Partition0이 다른 Consumer에게 할당될 수 있다.
Round Robin 할당 불균형 예시
- 3개의 Consumer C0,1,2와 3개의 Topic T0,1,2,를 가정
- T0은 Partition 1개, T1은 Partition 2개, T2는 Partition 3개를 가정
- C0은 T0만, C1은 T0과T1만, C2는 T0,T1,T2를 Subscribe 한다고 가정
- Consumer3에게 4개의 Partition이 할당된 것을 볼 수 있다.
RoundRobin Problem 3. Stick Assignor
Round Robin과 유사하지만, 가능한 균형적으로 할당을 보장하도록 추가
- Consumer들에게 할당된 Topic Partition의 수는 최대 1만큼 다르다.
- ConsumerA가 ConsumerB에 비해 2개이상 더 적은 Topic Partition이 할당된 경우, A에 할당된 Topic의 나머지 Partition들은 B에 할당될 수 없다.
- 재할당이 발생했을 때 기존 할당을 최대한 많이 보존하여 유지한다.
- 일반적인 상황에서는 Round Robin과 매우 유사하다.
Sticky Assignor - Consumer1이 제거되었다고 가정하면, Round Robin는 전체를 재할당 Stick는 기존할당을 유지
Round Robin 방식에서 설명했던 할당 불균형이 발생했던 시나리오
- 3개의 Consumer C0,C1,C2와 3개의 Topic T0,T1,T2를 가정
- T0은 Partiton 1개, T1은 Partition 2개, T2는 Partition 3개를 가정
- C0은 T0만, C1은 T0,T1만, C2는 T0,T1,T2를 Subscribe한다고 가정
- T1-P1은 Consumer1로 할당하여 분산 처리에 용이
할당 불균형 Stick 만약 Consumer0가 삭제된다면, 어떻게 동작하는지 비교하여 보자.
- Round Robin은 전체 재할당을 하지만, Sticky는 기존 할당을 유지한 채로 분산 처리
RoundRobin vs Stick '개발 > Kafka' 카테고리의 다른 글
[Kafka] - 13. Kafka Log File (0) 2022.08.10 [Kafka] - 12. Cooperative Sticky Assignor (0) 2022.08.09 [Kafka] - 10. Consumer_Rebalance (0) 2022.08.09 [Kafka] - 9.Replica failure&recovery (0) 2022.08.08 [Kafka] - 7. In sync Replicas (0) 2022.08.05