패스잇
백엔드 개발 · 심화

대규모 컨슈머 그룹에서 잦은 리밸런싱(rebalancing)이 발생할 경우 서비스에 미치는 영향과 이를 최소화하기 위한 전략을 설명하시오. 특히 `max.poll.interval.ms`, `session.timeout.ms`, `heartbeat.interval.ms` 등의 파라미터와 컨슈머 애플리케이션 로직 관점에서의 최적화 방안을 제시하시오.

힌트 · 컨슈머의 메시지 처리 시간, `max.poll.interval.ms`, `session.timeout.ms` 설정이 중요하며, 잦은 리밸런싱은 처리 지연 및 중복 처리를 야기할 수 있습니다.

컨슈머 그룹리밸런싱max.poll.interval.ms세션 타임아웃하트비트 간격

모범답안

대규모 컨슈머 그룹에서 잦은 리밸런싱은 서비스 성능에 큰 영향을 줄 수 있습니다. 리밸런싱 동안에는 메시지 처리가 중단되고, 완료 후에는 컨슈머가 파티션을 다시 할당받아야 하므로 전체 처리 지연이 발생합니다. 심한 경우, 이미 처리된 메시지가 다른 컨슈머에게 재할당되어 중복 처리가 발생할 수도 있습니다.

이를 최소화하기 위해 몇 가지 전략을 고려할 수 있습니다. 먼저, max.poll.interval.ms를 적절히 조정해야 합니다. 컨슈머가 메시지 처리를 완료하는 데 충분한 시간을 확보하면서, 불필요하게 긴 시간 동안 하트비트를 보내지 않아 세션 타임아웃을 유발하지 않도록 설정해야 합니다. session.timeout.ms는 컨슈머가 그룹에서 이탈했다고 판단하는 기준 시간이므로, 네트워크 불안정성을 고려하여 너무 짧게 설정하지 않도록 주의해야 합니다. heartbeat.interval.ms는 session.timeout.ms보다 훨씬 짧게 설정하여 컨슈머가 활성 상태임을 꾸준히 알려야 합니다.

컨슈머 애플리케이션 로직 측면에서는 메시지 처리 시간을 최소화하는 것이 중요합니다. 불필요한 I/O 작업이나 복잡한 계산을 줄이고, 병렬 처리를 활용하여 전체 처리량을 늘릴 수 있습니다. 또한, 메시지 처리 실패 시 재시도 로직을 구현할 때, 데드 레터 큐(Dead Letter Queue, DLQ)를 활용하여 무한 루프를 방지하고, 문제 메시지를 격리하여 분석할 수 있도록 하는 것이 좋습니다.

읽었다면, 이제 직접 답해볼 차례예요

패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.

함께 보는 메시지 큐 (Kafka) 면접 질문

← 메시지 큐 (Kafka) 면접 질문 전체 보기