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

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

3. consumerWakeup을 하나 실행한다.
4. kafka를 실행한 쉘을 보자.

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

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는 자신을 제외하라고 알림
- add된 consumer는 coordinator에게 자신을 group에 포함시켜달라고 요청함.
- 3. assignor 할당자 선택
- group coordinator는 할당자 알고리즘으로, 각 consumer가 어떤 파티션을 처리할지 계산함.
- 기본할당자에는 범위 할당 , 라운드 로빈이 존재. rangeAssignor RoundRobinAssignor
- 4. 새로운 파티션 할당
- coordinator는 할당된 파티션을 consumer에게 전달
- 5. rebalancing 완료
- 1. preparing rebalance
'리눅스 > 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 |