Post

poll()

poll() 주제의 핵심 개념과 적용 포인트를 정리합니다.

poll()

poll() 기본 동작

1
ConsumerRecords<String, String> records = consumer.poll(Duration.ofSeconds(10));

poll()은 단순 조회 메서드가 아니라 Consumer 생명주기와 밀접하게 연결된 API다.

  • 레코드 수신
  • 하트비트/그룹 유지
  • 리밸런스 후 할당 반영

즉, polling 루프는 Consumer 애플리케이션의 실행 구조 그 자체다.

왜 주기적인 poll() 호출이 중요한가

max.poll.interval.ms 시간 안에 poll()이 다시 호출되지 않으면, Kafka는 해당 Consumer가 정상 동작하지 않는다고 판단할 수 있다.
그 결과 그룹에서 제외되고 리밸런스가 발생한다.

따라서 poll 루프 안에서 예측 불가능한 블로킹 작업(DB 장시간 락, 외부 API 대기 등)을 직접 수행하는 패턴은 피하는 게 좋다.

실무 포인트

  • 메시지 수신과 비즈니스 처리를 분리해 poll 주기를 안정적으로 유지한다.
  • 처리 시간이 길면 배치 크기/스레드 구조/재시도 정책을 재설계해 리밸런스를 줄인다.
This post is licensed under CC BY 4.0 by the author.