KERBE.io

TECH / spring

Kafka Consumer Lag이 쌓일 때 Spring에서 확인한 것들

#Kafka#Spring#Consumer Lag

Kafka Consumer Lag이 지속적으로 쌓이는 상황을 겪으면, 원인을 파티션 문제인지 애플리케이션 문제인지부터 구분해야 합니다.

확인 순서

1. 파티션 수 대비 컨슈머 인스턴스 수

컨슈머 그룹의 인스턴스 수가 파티션 수보다 적으면 일부 컨슈머가 여러 파티션을 처리하게 되어 병목이 생깁니다. @KafkaListenerconcurrency 옵션이 실제 파티션 수를 초과하지 않는지, 부족하지 않은지 먼저 확인했습니다.

2. 처리 로직 자체의 지연

컨슈머가 메시지를 가져오는 속도는 문제없는데, 비즈니스 로직(DB 저장, 외부 API 호출)이 느려서 처리량이 못 따라가는 경우가 많았습니다. 이 경우 max.poll.records를 줄이고 max.poll.interval.ms를 넉넉히 잡아 리밸런싱 폭풍을 방지했습니다.

3. 리밸런싱 빈도

처리 시간이 max.poll.interval.ms를 초과하면 컨슈머가 그룹에서 제외되고 리밸런싱이 발생합니다. 리밸런싱이 잦으면 그 자체로 처리량이 급격히 떨어지므로, 리밸런싱 로그를 모니터링 지표에 반드시 포함시켰습니다.

정리

Lag이 쌓인다고 무조건 파티션을 늘리는 것은 근본 해결이 아닐 수 있습니다. 병목이 I/O인지, 컨슈머 병렬도인지, 리밸런싱인지 구분한 다음 대응하는 순서가 중요합니다.