
컬리 검색이 카프카를 들여다본 이야기 1
두줄요약
카프카 컨슈머 적체와 반복 리밸런싱으로 지연된 검색 색인 문제를 분석했습니다.\nmax.poll과 Spring Kafka 배치 리스너 조정으로 스루풋을 높이고 리밸런싱을 방지했습니다.
문제 상황
- 복수 토픽의 상품 정보를 Redis에서 조합해 검색 엔진에 색인하는 구조
- 메시지 발행 속도를 따라가지 못한 컨슈머 적체와 검색 색인 지연
- 컨슈머 그룹 내 반복적인 리밸런싱 발생
원인 분석
- 기본 max.poll 설정에서 500개 레코드 처리 시간이 5분을 초과하는 상황
- Record Listener 기반의 건별 색인 요청으로 낮아진 메시지 처리 스루풋
- Redis 지표상 과부하 정황 부재
해결 방법
- max-poll-records를 1로 조정해 처리 시간 초과에 따른 리밸런싱 방지
- Spring Kafka 리스너 타입을 Batch Listener로 전환
- poll로 가져온 레코드를 묶어 검색 엔진의 배치 색인 요청으로 처리
성능/운영 포인트
- 배치 처리로 메시지 소비와 색인 처리 시간 단축
- 기존 레코드 수·시간 간격에서도 리밸런싱 없는 색인 구축

