728x90
필요성
- 많은 Consumer를 가지는 Consumer Group에서 Rebalance가 발생하면 모든 Consumer들이 Rebalance를 수행하므로 많은 시간이 소모되고, 대량 데이터 처리 시 Lag가 더 길어질 수 있다.
- 유지보수 차원의 Consumer Restart도 Rebalance를 초래하므로 불필요한 Rebalance를 발생시키지 않을 방법을 대두.
Static Group Membership

- Consumer Group내의 Consumer들에게 고정된 ID를 부여
- Consumer 별로 Consumer Group 최초 조인 시 할당된 파티션을 그대로 유지하고, Consumer가 shutdown 되더라도 session.timeout.ms 내에 재기동되면, Rebalance가 수행되지 않고 기존 파티션이 재할당된다.
- 동작 과정
- Consumer#3 가 종료되었지만 Rebalance가 일어나지 않으며, Partition#3는 다른 Consumer에 재할당되지 않고 읽혀지지 않는다.
- Consumer#3가 session.timeout.ms 내에 다시 재기동되면, Partition#3는 Consumer#3에 할당
- Consumer#3가 session.timeout.ms내에 기동되지 않으면 Rebalance가 수행된 후 Partition#3가 다른 Consumer에 할당된다.
- Static Group Membership을 적용할 경우 session.timeout.ms를 좀 더 큰 값으로 설정해야 한다.
실습
1. Pizza Producer 기동
2. Consummer 기동(Static Group Membership)
Properties props = new Properties();
props.setProperty(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "192.168.56.101:9092");
props.setProperty(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());
props.setProperty(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());
props.setProperty(ConsumerConfig.GROUP_ID_CONFIG, "group-01-static");
props.setProperty(ConsumerConfig.GROUP_INSTANCE_ID_CONFIG, "3"); //Static Group Membership
- 실행할 때마다, 매번 GroupInstanceIdConfig 값을 1 -> 2 -> 3으로 변경(고정값)해서 실행시켜 준다.
3. Partition이 고정적으로 할당되는지 확인
kafka-consumer-groups --bootstrap-server localhost:9092 --describe --group group-01-static

4. Consumer#3 번 종료
종료 시, 바로 Rebalance가 되지 않는다. Consumer에 기본적으로 세팅된 session.timeout.ms(45,000) 이후 Rebalance 된다.

- session.timeout.ms 이내 재기동했기 때문에 Rebalance 되질 않는다.


- session.timeout.ms 이 후 재기동 했기 때문에 Rebalance 된다.
728x90
'카프카 > Java 기반 카프카 클라이언트 구현, Consumer 내부 메커니즘 2' 카테고리의 다른 글
| eager, cooperative 프로토콜과 파티션 할당 전략 (0) | 2025.10.19 |
|---|---|
| Consumer에서 여러 개의 Topic 읽기 (0) | 2025.10.18 |
| Consumer의 Heartbeat 스레드와 관련 주요 파라미터 (0) | 2025.10.18 |
| Consumer의 Heartbeat 스레드와 관련 주요 파라미터 (0) | 2025.10.18 |