1. Broker의 Group Coordinator와 Consumer/Consumer Group

    1. Rebalancing의 발생

      Untitled

      Untitled

      1. Consumer Group 내 Consumer 추가/제거될 때
      2. Topic에 새로운 Partition이 추가될 때
      3. Broker의 Group Coordinator가 Consumer Group 내 Consumer 들에게 파티션 재 할당(rebalancing) 수행 지시
    2. Consumer Group Status

      Untitled

      1. 3가지 상태를 가짐
        1. empty: Consumer Group은 존재하지만 내부에 Consumer가 존재하는 상태
        2. rebalance: Consumer Group에 Consumer 추가/삭제 일어날 때 상태
        3. Stable: reabalance가 끝나고 안정적인 상태
  2. Consumer 스태틱 그룹 맴버십의 필요성

    1. 많은 Consumer를 가지는 Consumer Group에서 Rebalance가 발생하면, 모든 Consumer들이 Rebalance를 수행하므로 자원의 낭비 발생 및 Lag 증가
    2. 유지보수 차원의 Consumer RestartRebalance를 초래하므로 불필요한 Rebalance를 발생 시키지 않을 방법 대두
  3. Consumer 스태틱 그룹 맴버십(Static Group MemberShip)

    Untitled

    1. Consumer Group 내의 Consumer 들에게 고정된 ID 부여
    2. Consumer 별로 Consumer Group 최초 조인 시 할당된 파티션을 그대로 유지하고 Consumershutdown 되어도 session.timeout.ms내에 재가동되면 rebalance가 발생하지 않고, 기존 파티션 재할당
  4. Consumer의 Heart Beat Thread

    Untitled

    1. Consumer는 Heart Beat Thread를 통해 Group Coordinator에 Consumer의 상태를 전송
    2. Heart Beat와 poll()관련 주요 Consumer 파라미터
      1. heartbeat.interval.ms

        1. default = 3000ms
        2. Heart Beat Thread가 Heart Beat를 보내는 간격
        3. session.timeout.ms보다 낮게 설정되어야 함
        4. session.timeout.ms1/3 보다 낮게 설정하는 것이 권장
      2. session.timeout.ms

        1. default = 45000ms
        2. 브로커가 Consumer로 부터 Heart Beat을 기다리는 최대 시간
        3. 브로커는 이 시간동안 Heart Beat을 Consumer로 부터 받지 못하면 해당 Consumer를 Group에서 제외하도록 Rebalance 지시
      3. max.poll.interval.ms

        Untitled

        1. default = 300000ms
        2. 이전 poll() 호출 후 다음 호출 poll()까지 브로커가 기다리는 시간
        3. 해당 시간동안 poll()호출이 Consumer로 부터 이뤄지지 않으면 해당 Consumer는 문제가 있는 것으로 판단하고 브로커는 rebalance 명령
  5. Consumer Rebalance의 Eager 모드

    Untitled

    1. 기본적으로 Rebalance 전략은 Eager모드를 사용
    2. rebalance 수행 시 기존 Consumer 들의 모든 파티션 할당을 취소하고 잠시 메세지를 읽지 않음
    3. 이후 새롭게 Consumer에 파티션을 다시 할당 하고 다시 메세지를 읽음
    4. 모든 Consumer가 잠시 메세지를 읽지 않는 시간으로 인해 Lag 발생 위험
  6. Consumer Rebalance (Incremental) Cooperative 모드

    Untitled

    1. Rebalance 수행 시 기존 Consumer들의 모든 파티션 할당을 취소하지 않고 대상이 되는 Consumer들에 대해서 파티션에 따라 점진적으로 Consumer를 할당하면서 Rebalance 수행
    2. 전체 Consumer가 메세지 읽기를 중지하면 개별 Consumer가 협력적으로(Cooperative) 영향을 받는 파티션만 Rebalance로 재분배
    3. Consumer를 가지는 Consumer Group 내에서 Rebalance 시간이 오래 걸릴 시 활용도 높음
  7. Consumer 파티션 할당 전략

    Untitled

  8. Round Robin과 Range 비교

    round robin, range 비교 - 1

    round robin, range 비교 - 1

    round-robin, range 비교 - 2

    round-robin, range 비교 - 2

    round robin rebalance 전/후

    round robin rebalance 전/후

    sticky의 rebalance 전/후 → sticky는 기존 매핑을 기억하고 최대한 유지

    sticky의 rebalance 전/후 → sticky는 기존 매핑을 기억하고 최대한 유지

    cooperative sticky의 rebalance 전/후 → sticky와 유사하지만 모두 취소하지 않는 차이

    cooperative sticky의 rebalance 전/후 → sticky와 유사하지만 모두 취소하지 않는 차이

    1. Round Robin은 토픽들의 파티션별로 순차적으로 Consumer에 할당
    2. 파티션 매핑이 Consumer별로 비교적 균일하게 할당
    3. Range는 서로 다른 토픽들의 동일한 파티션들을 같은 Consumer로 할당
    4. 서로 다른 토픽에서 동일한 키값을 가지는 파티션들은 같은 Consumer에서 처리 될 수 있도록 유도