피드로 돌아가기
컬리 기술블로그Backend
원문 읽기
컬리 검색이 카프카를 들여다본 이야기 1
컬리가 Kafka 설정 튜닝 2가지로 컨슈머 리밸런싱 제거 및 메시지 처리 스루풋 비약적 증가
AI 요약
Context
검색 인덱싱 파이프라인이 복수 토픽의 메시지를 조합하는 구조로 변경되었으나, 메시지 처리 속도가 발행 속도를 따라가지 못해 토픽에 메시지가 적체되었다. 동시에 컨슈머 그룹에서 예기치 못한 리밸런싱이 계속 발생해 처리가 더욱 지연되어 정상적인 검색 서비스가 불가능했다.
Technical Solution
- max-poll-records 값을 기본값 500에서 1로 감소: 컨슈머가 한번에 가져오는 레코드 수를 극단적으로 줄여 5분 내 처리 보장 및 리밸런싱 방지
- Spring Kafka 리스너 유형을 Record Listener에서 Batch Listener로 변경: 단일 메시지 처리 방식에서 poll()로 받은 전체 레코드를 List로 일괄 처리하도록 전환
- 검색 엔진 색인 요청 방식 변경: 건건이 색인을 요청하던 방식에서 배치로 여러 건을 모아 한번에 요청하도록 구현
Impact
아티클에서 정량적 수치(성능 향상 %, 레이턴시 감소량, 처리량 증가분 등)가 명시되지 않았음.
Key Takeaway
Kafka 컨슈머 리밸런싱 문제를 진단할 때는 max.poll 관련 설정과 리스너 구현 방식을 함께 검토해야 하며, Record 기반 처리에서 Batch 기반 처리로 전환하면 스루풋을 비약적으로 높일 수 있다.
실천 포인트
Spring Kafka를 사용하는 배치 처리 애플리케이션에서 @KafkaListener 설정을 type: batch로 변경하고 핸들러 로직을 List 기반으로 구현하면, 검색 엔진이 배치 요청을 지원할 때 메시지 처리 속도를 현격히 개선하고 예기치 못한 리밸런싱을 방지할 수 있다.