ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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

    댓글

Designed by Tistory.