리눅스/kafka

kafka에서 새로운 consumer가 들어오면 rebalance 되는 과정에 대해서

정지홍 2024. 10. 20. 14:18

1. 우선 pizza-topic에 대한 정보를 확인해보자.

 

2. 그리고 pizza-producer를 실행한다.

 

3. consumerWakeup을 하나 실행한다.

 

4. kafka를 실행한 쉘을 보자.

  1. 메시지는 컨슈머 그룹 group_01에 새로운 멤버가 합류할 때 발생한 로그이다. 새로운 멤버의 ID는 consumer-group_01-1-d74a4efc-04f6-4baf-bc48-8b3c6a21f697로 생성됨.  Kafka는 이 멤버에게 새로운 ID로 다시 참여하라고 요청합니다. 여기서 dynamic member는 임시적으로 추가되는 컨슈머를 나타낸다.
  2. 그룹 group_01이 리밸런싱을 준비하는 단계. 리밸런싱의 이유는 새로운 멤버가 그룹에 추가되었기 때문입. 기존의 세대(generation)는 32이며, 그룹은 파티션에 대한 오프셋을 관리하는 __consumer_offsets-45 토픽에 연결됨.
  3. kafka는 리밸런싱 후 group_01의 새로운 세대 번호를 33으로 업데이트함. 룹은 현재 1명의 멤버를 포함한다. 그룹 상태는 안정적이다.

 

5. 하나 더 실행하고 kafka 쉘 확인

2명이 있음을 알 수 있다.

 

6. 하나 더 해보자. 그러면 총 3명이 존재.

 

7. 각각 순서래로 1,2,0의 파티션을 할당받음.

 

 

 


rebalancing에 대해서.....

  • consumer group내에서 partition할당을 재조정 하는 것
  • 새로운 consumer가 추가시....
    • partition은 새로온 consumer에게도 줘야하니, 기존 consumer들이 처리중이던 partition을 재조정함.
  • consumer가 종료시....
    • 해당 consumer가 작업중이던 partition을 기존 consumer들에게 재분배
  • 과정...
    • 1. preparing rebalance
      • 그룹 상태를 'preparing rebalance'로 설정하고, 모든 consumer들에게 '곧 리벨런싱을 함'이라고 알림.
      • 이때 consumer는 처리중인 데이터를 정리해야 함.
    • 2. consumer membership을 변경
      • add된 consumer는 coordinator에게 자신을 group에 포함시켜달라고 요청함.
        • join group 요청
      • 떠나는 consumer는 자신을 제외하라고 알림
    • 3. assignor 할당자 선택
      • group coordinator는 할당자 알고리즘으로, 각 consumer가 어떤 파티션을 처리할지 계산함.
      • 기본할당자에는 범위 할당 , 라운드 로빈이 존재. rangeAssignor RoundRobinAssignor
    • 4. 새로운 파티션 할당
      • coordinator는 할당된 파티션을 consumer에게 전달
    • 5. rebalancing 완료

 

'리눅스 > kafka' 카테고리의 다른 글

consumer의 heart beat thread  (0) 2024.10.21
group coordinator , static group membership  (0) 2024.10.20
__consumer_offsets , auto.offset.reset  (0) 2024.10.19
kafka consumer fetcher  (0) 2024.10.18
kafka partitioner 구현 ( custom partitioner )  (0) 2024.10.18