Kafka 브로커가 죽었을 뿐인데 로그가 초당 수십 줄씩 쌓인 이유
KafkaSpringLogging
01이슈 및 현상
브로커에 연결할 수 없는 상황에서 send() 호출이 예외를 던지고 응답까지 내려간 뒤에도, 재접속·연결 실패 관련 로그가 초당 수십 줄씩 끝없이 쌓였습니다.
02원인 파악
ProducerFactory는 싱글턴 프로듀서 인스턴스를 재사용하는데, 내부 NetworkClient IO 스레드는 send 성공/실패와 무관하게 독립적으로 브로커 재접속을 시도합니다. 기본값이 RECONNECT_BACKOFF_MAX 1초, DELIVERY_TIMEOUT 2분, RETRIES 사실상 무한이라, send 요청 하나가 실패한 뒤에도 IO 스레드가 계속 살아남아 로그를 생성했습니다.
03해결 방안
KafkaConfig에서 MAX_BLOCK_MS·REQUEST_TIMEOUT을 3초, DELIVERY_TIMEOUT을 5초로 낮추고 RETRIES를 0으로 설정해 빠르게 실패하도록 바꿨습니다. 재접속 간격은 1초로 고정해 프론트 재시도 주기와 맞추고, local 프로파일에서 Kafka 내부 로거(NetworkClient·Metadata) 레벨을 error로 낮춰 잡음성 로그를 걸렀습니다.
04결과 및 성과
브로커 장애 시 발생하던 로그 폭주가 사라져 실제 오류를 가리던 잡음이 제거됐습니다. 발행 실패가 2분씩 매달리지 않고 5초 내에 빠르게 판정되어, 프론트엔드 재시도 로직과 박자가 자연스럽게 맞물리게 됐습니다.