Producer 필수 설정
bootstrap.servers
- broker의 주소 목록
- hostname:port 형식으로 1개 이상의 broker 를 나열
- 장애를 대비해 최소 2개 이상 권장
key.serializer, value.serializer
- key, value 를 각각 직렬화하기 위한 클래스 지정
- 내장 직렬화 클래스를 사용하거나, 커스텀 직렬화 클래스 사용
- ByteArraySerializer, StringSerializer, IntegerSerializer, JsonSerializer, ...
그외 주요 설정
buffer.memory
- 버퍼 메모리의 크기. 전송되지 않은 메시지를 보관하는 사이즈
- 한계 도달시 max.block.ms 시간 동안 메시지 대기
- batch 사이즈가 크다면 메모리를 늘려야함
acks
- 메시지를 send한 후 ack를 확인할 것인지 옵션
- acks=0
- ACK 를 기다리지 않는다.
- 속도는 제일 빠르지만, leader down 등 메시지 손실 가능성이 높음
- acks=1
- leader local log 에 메시지 기록하자마자 ACK 수신
- 메시지 손실 가능성은 위에 비해 낮으나, leader down시 메시지 손실 가능성 있음
- acks=all
- leader가 모든 follower에 대해 ACK 수신 시에만 ACK 수신
- min.insync.replicas 옵션을 통해 'write를 성공하기 위한 최소 복제본 수'를 지정
- message 손실률이 제일 중요한 경우 사용
- 그러나, 확인을 위해 처리 속도가 느림
batch.size
- message batch 처리를 허용, 임계값 도달시 message send
- linger.ms 주기가 되면 batch size 도달하지 않아도 send
linger.ms
- broker 에 send하기 전 추가 message를 기다리는 시간.
- batch.size 도달하거나, linger.ms 시간동안 기다리게 된다.
- 기본값 0
- ex) linger.ms=5 추가시, 5ms 동안 대기시간 추가
compression.type ★
- message 를 압축하여 전송
- 네트워크 부하를 줄이고 전체적인 처리 성능을 높이기 위함
- 기본값은 압축하지 않는 것
- GZIP, Snappy, LZA 형식의 압축 제공
- batch 처리가 많을수록 압축 효과가 좋음
reties
- message 전송 실패시 exception 발생 전 재시도하는 횟수
max.in.flight.requests.per.connection
- broker 의 응답을 기다리지 않고 보낼 수 있는 message 수
- 1보다 큰 수 지정시 순서가 변경될 수 있음
- message 순서가 상관없다면 1 보다 큰 수로 설정해 처리 성능 높일 수 있음
partitioner.class
timeout.ms
- message에 대한 follower의 ACK를 leader가 기다리는 시간