session.timeout.ms
컨슈머가 GroupCoordinator에게 해당시간내에 하트비트를 전송하지 않으면 리밸런싱이 일어난다. 컨슈머가 죽었으나 연결이 정상적으로 끊어지지 않는 상황이 발생하면 해당 값에 의해서 인지가 가능하다.group.min.session.timeout.ms와 group.max.session.timeout.ms 범위 값만 설정가능
default : 10000(10초)
max.poll.interval.ms
다음 poll까지 대기하는 시간. 값이 300000ms인데 poll 내부로직이 300000ms가 넘어가는 경우 리밸런싱이 일어난다.default : 300000(5분)
아래 코드 참고
@KafkaListener(topics = "xx", groupId = "yy")
public void kafkaListen(String message) throws InterruptedException {
for (int x = 0; x < 10_000; x++) {
Thread.sleep(15_000);
}
}
컨슈머가 GroupCoordinator에게 하트비트는 전송하지만 실제로 아무일도 하지 않는 경우 컨슈머에 문제가 있는 것으로 판단하고 해당 파티션을 제외처리한다.- 카프카 0.10.1 버전부터 폴링 간에도 하트비트를 전송할 수 있도록 별도의 하트비트 스레드가 추가되었다고 알고 있음
- 그래서 poll 내부로직이 오래 걸리더라도 하트비트는 계속 보내기 때문에 리밸런싱이 당연히 발생하지 않을 것으로 예상
- 하지만 poll 내부로직이 오래 걸리자 리밸런싱이 발생함
- 의아하게 생각하고 session.timeout.ms를 늘려봤지만 동일한 문제가 발생함
- 원인을 찾다보니 max.poll.interval.ms 시간을 초과했기 때문이였음
- poll 내부로직이 오래 걸리면 max.poll.interval.ms 시간을 늘리자
0 Comments:
댓글 쓰기