Kafka 프로듀서 설정: 전송을 다듬는 대시보드

Kafka 프로듀서 설정: 전송을 다듬는 대시보드

Kafka 프로듀서는 이벤트를 브로커에 쓰는 클라이언트예요. 이벤트를 언제, 어떻게, 얼마나 안전하게 보낼지는 전부 설정 값으로 결정돼요. 이 페이지에서는 프로듀서가 실제로 챙겨야 할 핵심 설정들을 하나씩 살펴볼게요.

출처: Apache Kafka — Producer Configs

연결과 직렬화: 시작은 항상 여기서

프로듀서가 제일 먼저 알아야 할 건 "어디로 보낼지"예요. bootstrap.servers는 클러스터에 처음 연결할 때 쓰는 호스트/포트 목록이에요. 이 목록으로 전체 브로커 집합을 부트스트랩하고 발견해요. 목록 순서는 중요하지 않지만, 서버 하나가 죽어도 견디도록 두 개 이상 넣는 걸 권장해요. 형식은 host1:port1,host2:port2,...처럼 콤마로 이어 붙여요.

bootstrap.servers=broker1:9092,broker2:9092

키와 값은 직렬화해야 브로커로 보낼 수 있어요. key.serializervalue.serializerorg.apache.kafka.common.serialization.Serializer 인터페이스를 구현한 클래스를 지정해요. 예를 들어 문자열 키는 org.apache.kafka.common.serialization.StringSerializer를 쓰는 식이에요.

배치와 압축: 처리량을 좌우하는 두 축

프로듀서는 레코드를 한 건씩 보내지 않고 메모리에 모아 더 큰 배치로 보내요. buffer.memory는 서버로 보내기 전에 레코드를 버퍼링하는 데 쓸 총 메모리 바이트예요. 레코드가 서버로 전달되는 속도보다 빨리 쌓이면 프로듀서는 max.block.ms 동안 블록하다가, 그 시간이 지나면 예외를 던져요. 기본값은 33554432(32MB)예요.

compression.type은 프로듀서가 생성하는 모든 데이터의 압축 타입이에요. 기본은 none(압축 안 함)이고, 유효 값은 none, gzip, snappy, lz4, zstd예요. 압축은 데이터 전체 배치 단위로 이뤄져서, 배칭 효율이 좋을수록 압축률도 올라가요.

compression.type=lz4
buffer.memory=67108864

재시도와 내구성: 유실 없이 보내기

전송이 일시적 오류로 실패하면 몇 번 다시 시도할까를 retries로 정해요. 기본값이 2147483647이라 사실상 무한 재시도에 가까워요. 단, 자동 재시도는 같은 레코드를 그대로 다시 보내는 방식이라, 일반적으로 이 설정을 비워 두고 delivery.timeout.ms로 재시도 행동을 제어하는 쪽을 선호해요.

retries=2147483647
delivery.timeout.ms=120000

enable.idempotence를 켜고 max.in.flight.requests.per.connection을 1보다 크게 둔 채 재시도를 허용하면 레코드 순서가 뒤바뀔 수 있어요. 첫 배치가 실패해 재시도되는 동안 두 번째 배치가 성공하면, 두 번째 배치의 레코드가 먼저 보일 수 있거든요.

더 알아보기