이 페이지 쓰는 법

프리셋 3종 — 처리량 / 지연 / 내구성

설정 하나씩 고민하기 전에 무엇을 포기할지 먼저 정하는 편이 빠릅니다. 아래 세 조합은 서로 배타적입니다. 처리량 우선 조합의 "linger.ms 올림"은 지연 우선 조합의 "linger.ms 내림"과 정면으로 충돌합니다.

설정 프리셋 3종 비교 — 처리량 우선, 지연 우선, 내구성 우선 세 가지 목표에 따른 설정 출발점을 나란히 비교합니다. 처리량 우선은 batch.size 를 262144 로 키우고 linger.ms 를 50에서 100 사이로 두며 lz4 나 zstd 압축을 켜고 fetch.min.bytes 와 max.poll.records 를 올립니다. 대신 지연이 늘어납니다. 지연 우선은 linger.ms 를 0 으로 두고 batch.size 는 기본값을 쓰며 압축을 끄거나 lz4 만 쓰고 fetch.min.bytes 를 1 로 두어 대기를 없앱니다. 대신 처리량과 압축률을 포기하고 acks 를 1 로 내리면 유실을 감수합니다. 내구성 우선은 acks=all, enable.idempotence=true, replication.factor 3, min.insync.replicas 2, unclean.leader.election.enable=false 조합으로, 대부분 Kafka 4.3 의 기본값과 같습니다. 세 목표는 서로를 깎아 먹으므로 동시에 만족할 수 없습니다. 설정 프리셋 3종 — 무엇을 포기할지 먼저 정합니다 값은 출발점 예시입니다. 실제 값은 측정한 뒤 조정하세요. 기본값과 다른 항목만 적었습니다. 처리량 우선 지연을 조금 포기합니다 batch.size → 262144 linger.ms → 50 ~ 100 compression.type → lz4 또는 zstd buffer.memory → 더 크게 fetch.min.bytes → 수십 KB max.poll.records → 크게 acks → all 유지 권장 지연 우선 처리량과 압축률을 포기합니다 linger.ms → 0 batch.size → 기본 16384 compression.type → none 또는 lz4 fetch.min.bytes → 1 (기본) fetch.max.wait.ms → 작게 max.poll.records → 작게 acks → 1 (유실 위험 감수) 내구성 우선 지연과 가용성을 포기합니다 acks → all (기본) enable.idempotence → true (기본) replication.factor → 3 min.insync.replicas → 2 delivery.timeout.ms → 넉넉하게 retries → 기본값 유지 max.in.flight.requests → 5 이하 (기본) 세 프리셋은 동시에 만족할 수 없습니다 — 처리량·지연·내구성은 서로를 깎아 먹습니다. 내구성 우선은 대부분 4.3 기본값과 같습니다. 기본값을 흔들기 전에 정말 필요한지 확인하세요. acks 를 1 로 내리면 유실을 허용한다는 뜻입니다 — 로그·지표성 데이터에만 쓰세요. 내구성 우선은 unclean.leader.election.enable=false(기본)를 반드시 유지합니다.
설정 프리셋 3종 비교 — 처리량 우선 · 지연 우선 · 내구성 우선이 각각 acks, linger.ms, batch.size, min.insync.replicas를 어느 방향으로 밀어 놓는지
목적별 조정 방향. 올림 · 내림 · = 기본값 유지. 기본값 열만 공식 확인값이며 나머지는 방향 제안입니다
설정 기본값 (4.3) 처리량 우선 지연 우선 내구성 우선 왜 그 방향인가
Producer
acks all 1로 완화 1로 완화 all = 1은 리더만 확인하므로 왕복이 짧아지지만 리더 장애 시 유실을 허용합니다
linger.ms 5 (0) = 배치를 모으는 시간입니다. 올리면 배치가 커져 처리량이 늘고 그만큼 지연이 늘어납니다
batch.size 16384 = = linger.ms와 함께 올려야 효과가 있습니다. 이 값만 올리면 배치가 차기 전에 전송됩니다
compression.type none 압축 적용 신중히 압축 적용 압축은 네트워크·디스크를 줄이고 CPU를 씁니다. 코덱별 압축률·CPU 수치는 공식 문서에 없으므로 아래 비교를 보고 직접 측정하세요
enable.idempotence true = = = 세 조합 모두 유지합니다. 끌 이유가 없습니다 — 중복 제거와 순서 보장을 공짜로 얻습니다
max.in.flight.requests.per.connection 5 = = = 멱등성이 켜져 있으면 5가 상한입니다. 6 이상은 ConfigException
delivery.timeout.ms 120000 = 재시도의 실질 상한입니다. 지연 우선은 빨리 포기하고 폴백, 내구성 우선은 끝까지 재시도합니다
buffer.memory 33554432 = = 배치를 크게 모으려면 버퍼도 커야 합니다. 고갈되면 max.block.ms 동안 블록합니다
Consumer
fetch.min.bytes 1 = = 올리면 fetch 요청 수가 줄어 브로커 부하가 내려가고 지연이 늘어납니다
fetch.max.wait.ms 500 = = fetch.min.bytes가 안 차도 기다리는 상한입니다. 내리면 빈 응답이 늘어납니다
max.poll.records 500 내구성 우선에서 내리는 이유는 처리량이 아니라 한 배치의 처리 시간을 max.poll.interval.ms 안에 넣기 위해서입니다
enable.auto.commit true = = false 자동 커밋은 처리 완료 전에 커밋될 수 있어 유실 위험이 있습니다. 정확성이 필요하면 처리 후 수동 커밋
isolation.level read_uncommitted = = read_committed 트랜잭션 프로듀서를 쓰면서 이걸 안 바꾸면 abort된 레코드까지 읽습니다
auto.offset.reset latest = = none none은 커밋이 없을 때 조용히 건너뛰는 대신 예외로 알려 줍니다
Broker · Topic
min.insync.replicas topic 1 = = 2 (RF=3) acks=all함께여야만 의미가 있습니다. RF와 같게 두면 브로커 1대 손실로 쓰기가 멈춥니다
unclean.leader.election.enable false = = = 세 조합 모두 false 유지입니다. 켜는 것은 유실을 허용하는 결정이며 처리량·지연과 무관합니다
num.replica.fetchers 1 = 내구성 우선에서도 올립니다 — 복제가 빨라야 ISR이 유지되고 acks=all이 지연되지 않습니다
num.io.threads 8 = = RequestHandlerAvgIdlePercent0.3 아래일 때만 올리세요. 디스크가 병목이면 무효입니다
num.network.threads 3 = = NetworkProcessorAvgIdlePercent0.3 아래일 때만 올리세요

압축 코덱 선택

압축 관련 확인된 값 — 코덱별 성능 수치는 공식 문서에 없습니다
설정 기본값 허용 범위 메모
compression.type producer none none · gzip · snappy · lz4 · zstd 압축은 배치 단위로 적용됩니다. 배치가 작으면 압축 효과도 작습니다
compression.type topic producer 위 목록 + producer · uncompressed producer는 프로듀서가 압축한 배치를 그대로 보관합니다. 다른 값이면 브로커가 재압축해 CPU를 씁니다
compression.gzip.level -1 1~9 또는 -1 -1은 라이브러리 기본 레벨
compression.lz4.level 9 1~17
compression.zstd.level 3 -131072~22
코덱을 직접 측정하는 방법 — 추측하지 말고 재세요
# 같은 데이터로 코덱만 바꿔 처리량과 지연을 비교합니다.
# 압축률은 JMX 의 compression-rate-avg (압축후/압축전 비율) 로 확인합니다.
for codec in none lz4 zstd gzip snappy; do
  echo "=== $codec"
  bin/kafka-producer-perf-test.sh     --bootstrap-server localhost:9092     --topic perf-test --num-records 500000 --record-size 1024 --throughput -1     --command-property compression.type=$codec     --command-property batch.size=16384     --command-property linger.ms=5
done

# 참고: --producer-props / --producer.config 는 deprecated 입니다.
#       4.3 부터는 --command-property / --command-config 를 쓰세요.
# 출력의 "records/sec", "avg latency", "99th" 를 비교하고
# 브로커의 BytesInPerSec 감소량을 함께 보세요.
# CPU 는 브로커·클라이언트 양쪽 모두 확인해야 합니다.

Broker 설정

KRaft 기준입니다. Update Moderead-only인 설정은 재시작이 필요하고, cluster-wide·per-brokerkafka-configs --entity-type brokers --alter로 무중단 변경할 수 있습니다 (CLI 치트시트).

Broker 설정 — Apache Kafka 4.3.1 공식 문서 기준 기본값 (80개)
설정명 기본값 범위 · 타입 설명 튜닝 포인트
process.roles 필수 · 기본값 없음 list
[broker, controller]
KRaft 노드 역할. broker / controller / broker,controller(combined) 프로덕션은 역할 분리를 권장합니다. combined는 개발·소규모 전용
node.id 필수 · 기본값 없음 int
[0,...]
KRaft 노드의 고유 정수 ID. 클러스터 내 유일해야 합니다 컨트롤러와 브로커가 ID 공간을 공유합니다. 재사용하면 등록이 거부됩니다
controller.quorum.bootstrap.servers ""
(빈 값)
list
non-empty list
컨트롤러 쿼럼을 찾기 위한 host:port 목록 4.x 권장 방식. 정적 controller.quorum.voters보다 유연합니다
controller.quorum.voters ""
(빈 값)
list
non-empty list
id@host:port 형식의 정적 투표자 목록 이 값을 쓰면 쿼럼 멤버가 고정됩니다. 동적 쿼럼은 bootstrap.servers 쪽을 씁니다
controller.listener.names 필수 · 기본값 없음 list 컨트롤러 요청을 받는 리스너 이름. 브로커 전용 노드도 반드시 정의해야 합니다 inter.broker.listener.name과 같은 값을 쓸 수 없습니다
controller.quorum.fetch.timeout.ms 2000
(2 seconds)
int
[0,...]
팔로워가 리더 fetch 실패를 선거 트리거로 판단하는 시간 값을 늘리면 불필요한 재선거가 줄지만 실제 장애 감지가 늦어집니다
controller.quorum.election.timeout.ms 1000
(1 second)
int
[0,...]
선거를 재시작하기 전 대기 시간 네트워크 지연이 큰 멀티 AZ에서는 상향 검토
controller.quorum.append.linger.ms 25 int
[0,...]
메타데이터 레코드를 리더가 모아 두는 시간 낮추면 메타데이터 반영이 빨라지고 디스크 flush가 잦아집니다
metadata.log.dir null string __cluster_metadata 로그를 둘 디렉터리 미지정 시 log.dirs의 첫 디렉터리를 씁니다. 별도 디스크 분리를 권장
metadata.max.retention.bytes 104857600
(100 mebibytes)
long 메타데이터 로그·스냅샷 보관 크기 상한 스냅샷 주기와 함께 컨트롤러 디스크 사용량을 좌우합니다
metadata.log.max.record.bytes.between.snapshots 20971520 long
[1,...]
스냅샷을 만들기까지 누적할 메타데이터 레코드 바이트 값이 크면 재시작 시 리플레이가 길어집니다
listeners PLAINTEXT://:9092 list 브로커가 바인딩할 이름://호스트:포트 목록 내부/외부 분리는 여기서 시작합니다. 상세 패턴은 보안 치트시트 참조
advertised.listeners null list 클라이언트에게 알릴 주소. 미지정이면 listeners 값을 그대로 알립니다 Docker·K8s에서 컨테이너 내부 주소를 그대로 알려 접속이 깨지는 원인 1위
listener.security.protocol.map SASL_SSL:SASL_SSL,PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT string 리스너 이름 → 보안 프로토콜 매핑 리스너에 커스텀 이름을 붙였으면 반드시 함께 지정해야 합니다
inter.broker.listener.name null string 브로커 간 통신(주로 파티션 복제)에 쓰는 리스너 지정하지 않으면 security.inter.broker.protocol이 결정합니다
security.inter.broker.protocol PLAINTEXT string
[PLAINTEXT, SSL, SASL_PLAINTEXT, SASL_SSL]
브로커 간 통신 보안 프로토콜 inter.broker.listener.name과 동시에 설정할 수 없습니다
log.dirs null list 로그 세그먼트를 저장할 디렉터리 목록(콤마 구분) 미지정이면 log.dir을 씁니다. JBOD는 여기에 여러 디렉터리를 나열
num.partitions 1 int
[1,...]
자동 생성 토픽의 기본 파티션 수 소비 병렬성 상한. 운영 토픽은 명시 생성하세요
default.replication.factor 1 int 자동 생성 토픽의 기본 복제 계수 기본값 1은 브로커 한 대 손실로 데이터가 사라집니다. 3으로 올리세요
auto.create.topics.enable true boolean 존재하지 않는 토픽 요청 시 자동 생성 오타 토픽이 조용히 생깁니다. 운영에서는 false 권장
delete.topic.enable true boolean 토픽 삭제 허용 여부
min.insync.replicas 1 int
[1,...]
ISR 최소 개수. acks=all일 때만 판정에 쓰입니다 RF=3이면 2가 표준. RF와 같게 두면 브로커 1대 손실로 쓰기가 멈춥니다
unclean.leader.election.enable false boolean ISR 밖 레플리카를 리더로 승격할지 true는 가용성을 위해 데이터 유실을 허용하는 선택입니다
replica.lag.time.max.ms 30000
(30 seconds)
long 팔로워가 이 시간 안에 따라오지 못하면 ISR에서 제외 너무 짧으면 ISR이 자주 흔들려 IsrShrinksPerSec가 튑니다
num.replica.fetchers 1 int
[1,...]
팔로워가 리더에서 데이터를 당겨오는 스레드 수 복제 지연(URP 지속)이 보이면 먼저 올려 볼 값
replica.fetch.max.bytes 1048576
(1 mebibyte)
int
[0,...]
파티션당 복제 fetch 최대 바이트 절대 상한이 아닙니다 — 첫 배치가 더 커도 반환해 복제 진행을 보장합니다(This is not an absolute maximum). 작으면 처리량만 떨어집니다
message.max.bytes 1048588 int
[0,...]
Kafka가 허용하는 최대 레코드 배치 크기(압축 후) 토픽의 max.message.bytes가 오버라이드합니다. 1MB가 아니라 1048588입니다
num.network.threads 3 int
[1,...]
네트워크 요청 수신·응답 전송 스레드 수 NetworkProcessorAvgIdlePercent가 0.3 아래면 상향
num.io.threads 8 int
[1,...]
디스크 I/O를 포함한 요청 처리 스레드 수 RequestHandlerAvgIdlePercent가 0.3 아래면 상향. 디스크 수 이상 권장
queued.max.requests 500 int
[1,...]
네트워크 스레드가 대기시킬 요청 큐 길이 큐가 길면 지연이 숨겨집니다. 대기 시간 메트릭과 함께 보세요
background.threads 10 int
[1,...]
백그라운드 작업 처리 스레드 수
num.recovery.threads.per.data.dir 2 int
[1,...]
비정상 종료 후 로그 복구에 쓰는 디렉터리당 스레드 수 재시작 시간을 줄이는 가장 직접적인 값
socket.send.buffer.bytes 102400
(100 kibibytes)
int SO_SNDBUF 크기 BDP가 큰 WAN 구간에서는 상향
socket.receive.buffer.bytes 102400
(100 kibibytes)
int SO_RCVBUF 크기
socket.request.max.bytes 104857600
(100 mebibytes)
int
[1,...]
요청 하나의 최대 바이트 message.max.bytes보다 충분히 커야 합니다
log.segment.bytes 1073741824
(1 gibibyte)
int
[1048576,...]
세그먼트 파일 하나의 크기 리텐션 삭제는 세그먼트 단위입니다. 크면 실제 보관량이 설정보다 커집니다
log.roll.hours 168 int
[1,...]
크기에 도달하지 않아도 세그먼트를 새로 여는 시간 log.roll.ms가 있으면 그쪽이 우선합니다
log.retention.hours 168 int delete 정책의 기본 보관 시간 log.retention.ms > log.retention.minutes > 이 값 순으로 우선
log.retention.bytes -1 long 파티션당 보관 크기 상한. -1은 무제한 시간·크기 중 먼저 도달한 조건으로 삭제됩니다
log.retention.check.interval.ms 300000
(5 minutes)
long
[1,...]
리텐션 조건을 검사하는 주기 이 주기 때문에 삭제가 즉시 일어나지 않습니다
log.cleanup.policy delete list
[compact, delete]
기본 정리 정책. delete / compact (조합 가능) 토픽 레벨 cleanup.policy가 오버라이드합니다
log.cleaner.enable true boolean 로그 컴팩션 스레드 활성화 false__consumer_offsets도 컴팩션되지 않습니다
log.cleaner.threads 1 int
[0,...]
컴팩션 스레드 수 컴팩션이 밀리면(dirty ratio 증가) 상향
log.cleaner.min.cleanable.ratio 0.5 double
[0,...,1]
컴팩션을 시작할 dirty 비율 낮추면 더 자주 컴팩션되고 CPU·I/O를 더 씁니다
log.index.interval.bytes 4096
(4 kibibytes)
int
[0,...]
오프셋 인덱스 항목을 추가하는 간격
log.local.retention.ms -2 long
[-2,...]
Tiered Storage에서 로컬 디스크에 남길 시간. -2retention.ms를 따름 원격 계층을 켰을 때 로컬 디스크 사용량을 결정합니다
remote.log.storage.system.enable false boolean 브로커에서 Tiered Storage 기능 활성화 켠 뒤 토픽별 remote.storage.enable로 개별 적용
offsets.topic.replication.factor 3 short
[1,...]
__consumer_offsets 복제 계수 브로커 수가 이보다 적으면 토픽 생성이 실패합니다
offsets.topic.num.partitions 50 int
[1,...]
__consumer_offsets 파티션 수 생성 후에는 변경하지 마세요. 그룹→파티션 매핑이 바뀝니다
offsets.retention.minutes 10080 int
[1,...]
빈 그룹의 커밋 오프셋 보관 시간 만료되면 auto.offset.reset이 발동해 재처리·유실이 생깁니다
transaction.state.log.replication.factor 3 short
[1,...]
__transaction_state 복제 계수
transaction.state.log.min.isr 2 int
[1,...]
__transaction_state의 최소 ISR
transaction.max.timeout.ms 900000
(15 minutes)
int
[1,...]
프로듀서가 요청할 수 있는 트랜잭션 타임아웃 상한 프로듀서의 transaction.timeout.ms가 이 값을 넘으면 거부됩니다
transactional.id.expiration.ms 604800000
(7 days)
int
[1,...]
트랜잭션 ID를 만료 처리하기까지의 유휴 시간
producer.id.expiration.ms 86400000
(1 day)
int
[1,...]
유휴 producer ID 만료 시간 만료 후 재사용하면 UnknownProducerIdException이 나올 수 있습니다
group.initial.rebalance.delay.ms 3000
(3 seconds)
int 첫 리밸런스를 지연시켜 멤버가 모이길 기다리는 시간 개발 환경에서는 0으로 두면 기동이 빨라집니다
group.min.session.timeout.ms 6000
(6 seconds)
int 컨슈머가 요청할 수 있는 세션 타임아웃 하한
group.max.session.timeout.ms 1800000
(30 minutes)
int 컨슈머가 요청할 수 있는 세션 타임아웃 상한
group.max.size 2147483647 int
[1,...]
한 컨슈머 그룹의 최대 멤버 수
group.coordinator.rebalance.protocols classic,consumer,streams list
[consumer, classic, share, streams]
코디네이터가 활성화할 그룹 프로토콜 목록 consumer(KIP-848)·share(KIP-932)를 쓰려면 여기에 있어야 합니다
group.consumer.session.timeout.ms 45000
(45 seconds)
int
[1,...]
새 컨슈머 프로토콜의 세션 타임아웃 (브로커가 관리) group.protocol=consumer에서는 클라이언트 값이 무시됩니다
group.consumer.heartbeat.interval.ms 5000
(5 seconds)
int
[1,...]
새 컨슈머 프로토콜의 하트비트 간격 (브로커가 관리)
group.share.delivery.count.limit 5 int
[2,...,10]
Share Group에서 한 레코드의 최대 전달 시도 횟수 초과하면 레코드가 아카이브됩니다. DLQ 대체 설계 시 핵심 값
group.share.record.lock.duration.ms 30000
(30 seconds)
int
[1000,...,3600000]
Share Group에서 획득한 레코드 잠금 유지 시간 처리 시간이 이보다 길면 다른 컨슈머에게 재배달됩니다
group.share.max.size 200 int
[1,...,1000]
한 Share Group의 최대 멤버 수 컨슈머 수가 파티션 수를 넘어도 됩니다
auto.leader.rebalance.enable true boolean 리더 불균형을 주기적으로 자동 교정 재시작 직후 리더가 한쪽에 몰리는 것을 자동 완화합니다
leader.imbalance.check.interval.seconds 300 long
[1,...]
리더 불균형 검사 주기
broker.rack null string 브로커의 랙·AZ 식별자 지정하면 레플리카가 랙에 분산 배치됩니다. AZ 단위 장애 대비
broker.heartbeat.interval.ms 2000
(2 seconds)
int 브로커가 컨트롤러에 하트비트를 보내는 간격
broker.session.timeout.ms 9000
(9 seconds)
int 컨트롤러가 브로커를 fenced로 판단하는 시간
controlled.shutdown.enable true boolean 종료 전 리더십을 넘기고 내려가기 false면 재시작마다 짧은 불가용 구간이 생깁니다
compression.type producer string
[uncompressed, zstd, lz4, snappy, gzip, producer]
브로커가 저장할 때 적용할 압축. producer는 프로듀서 설정을 그대로 유지 producer가 아니면 재압축으로 CPU를 씁니다
max.connections 2147483647 int
[0,...]
브로커 전체 최대 연결 수
max.connections.per.ip 2147483647 int
[0,...]
IP당 최대 연결 수 NAT·K8s에서는 여러 클라이언트가 같은 IP로 보입니다
connections.max.idle.ms 600000
(10 minutes)
long 유휴 연결을 닫기까지의 시간
authorizer.class.name ""
(빈 값)
string
non-null string
Authorizer 구현 클래스. 미설정이면 인가를 하지 않습니다 KRaft는 org.apache.kafka.metadata.authorizer.StandardAuthorizer
ssl.client.auth none string
[required, requested, none]
리스너가 클라이언트 인증서를 요구할지 requested는 잘못 설정된 클라이언트도 통과시켜 권장되지 않습니다
sasl.enabled.mechanisms GSSAPI list 브로커가 받아들일 SASL 메커니즘 목록
transaction.partition.verification.enable true boolean 트랜잭션 파티션 검증 활성화
log.dir.failure.timeout.ms 30000
(30 seconds)
long
[1,...]
로그 디렉터리 장애를 컨트롤러에 알리지 못할 때 브로커를 내리는 시간

Topic 설정

Topic 설정 — Apache Kafka 4.3.1 공식 문서 기준 기본값 (33개)
설정명 기본값 범위 · 타입 설명 튜닝 포인트
cleanup.policy delete list
[compact, delete]
delete / compact / compact,delete 기존 데이터에 소급 적용되지 않습니다. 변경 시점 이후 세그먼트에만 적용
retention.ms 604800000
(7 days)
long
[-1,...]
delete 정책의 보관 시간. -1은 무제한 재처리 여유 기간을 결정합니다
retention.bytes -1 long 파티션당 보관 크기. -1은 무제한 토픽 전체가 아니라 파티션당입니다
segment.bytes 1073741824
(1 gibibyte)
int
[1048576,...]
세그먼트 파일 크기 삭제는 세그먼트 단위입니다. 짧은 리텐션을 원하면 이 값도 줄이세요
segment.ms 604800000
(7 days)
long
[1,...]
크기 미달이어도 세그먼트를 새로 여는 주기 리텐션이 짧을 때 실제 삭제 시점을 좌우합니다
segment.index.bytes 10485760
(10 mebibytes)
int
[4,...]
오프셋 인덱스 파일 크기 상한
segment.jitter.ms 0 long
[0,...]
세그먼트 롤링 시점에 더할 무작위 지연 여러 파티션이 동시에 롤링하는 것을 분산시킵니다
min.insync.replicas 1 int
[1,...]
acks=all 쓰기가 성공하려면 필요한 최소 ISR RF=3 → 2. RF와 같게 두면 브로커 1대 손실로 쓰기 중단
unclean.leader.election.enable false boolean ISR 밖 레플리카의 리더 승격 허용 유실을 감수하고 가용성을 택하는 스위치
max.message.bytes 1048588 int
[0,...]
이 토픽이 받는 최대 레코드 배치 크기(압축 후) 브로커 message.max.bytes를 오버라이드합니다
compression.type producer string
[uncompressed, zstd, lz4, snappy, gzip, producer]
토픽 저장 압축. producer면 프로듀서 배치를 그대로 보관
min.cleanable.dirty.ratio 0.5 double
[0,...,1]
컴팩션을 시작할 dirty 비율 낮추면 tombstone·중복 키가 더 빨리 사라집니다
min.compaction.lag.ms 0 long
[0,...]
메시지가 컴팩션 대상이 되기까지 최소 유지 시간 컨슈머가 최신 레코드를 읽을 시간을 보장합니다
max.compaction.lag.ms 9223372036854775807 long
[1,...]
컴팩션 대상이 되기까지 허용할 최대 시간 GDPR 삭제 요구처럼 상한이 필요한 경우에 씁니다
delete.retention.ms 86400000
(1 day)
long
[0,...]
tombstone(null value)을 유지하는 시간 이보다 오래 멈춘 컨슈머는 삭제 사실을 놓칩니다
file.delete.delay.ms 60000
(1 minute)
long
[0,...]
삭제 표시된 파일을 실제로 지우기까지의 지연
message.timestamp.type CreateTime string
[CreateTime, LogAppendTime]
CreateTime(프로듀서 시각) / LogAppendTime(브로커 시각) Streams의 이벤트 시간 처리와 리텐션 판정에 함께 영향
message.timestamp.after.max.ms 3600000
(1 hour)
long
[0,...]
브로커 시각보다 미래인 타임스탬프 허용 폭 초과하면 InvalidTimestampException
message.timestamp.before.max.ms 9223372036854775807 long
[0,...]
브로커 시각보다 과거인 타임스탬프 허용 폭
flush.messages 9223372036854775807 long
[1,...]
이 메시지 수마다 fsync. 기본은 사실상 무제한 Kafka는 복제로 내구성을 얻습니다. 임의로 낮추면 처리량이 급락합니다
flush.ms 9223372036854775807 long
[0,...]
fsync 강제 주기
index.interval.bytes 4096
(4 kibibytes)
int
[0,...]
인덱스 항목 추가 간격
preallocate false boolean 새 세그먼트 파일을 미리 할당
remote.storage.enable false boolean 이 토픽에 Tiered Storage 사용 브로커에서 remote.log.storage.system.enable=true가 먼저 필요합니다
local.retention.ms -2 long
[-2,...]
원격 계층으로 올린 뒤 로컬에 남길 시간. -2retention.ms를 따름
local.retention.bytes -2 long
[-2,...]
로컬에 남길 크기. -2retention.bytes를 따름
remote.log.copy.disable false boolean 원격 계층으로의 복사만 중단
remote.log.delete.on.disable false boolean Tiered Storage를 끌 때 원격 데이터를 삭제할지
leader.replication.throttled.replicas ""
(빈 값)
list
[partitionId]:[brokerId],[partitionId]:[brokerId],...
리더 쪽 복제 대역폭 제한을 적용할 레플리카 목록 파티션 재할당 시 kafka-reassign-partitions가 자동으로 설정합니다
follower.replication.throttled.replicas ""
(빈 값)
list
[partitionId]:[brokerId],[partitionId]:[brokerId],...
팔로워 쪽 복제 대역폭 제한 대상 재할당이 끝나면 반드시 제거하세요. 남으면 복제가 계속 느립니다
compression.gzip.level -1 int
[1,...,9] or -1
gzip 압축 레벨
compression.lz4.level 9 int
[1,...,17]
lz4 압축 레벨
compression.zstd.level 3 int
[-131072,...,22]
zstd 압축 레벨

Producer 설정

4.x에서 기본값이 바뀐 항목(acks, enable.idempotence, linger.ms)에 특히 주의하세요. 상세한 전송 파이프라인은 4장 Producer 심화에 있습니다.

Producer 설정 — Apache Kafka 4.3.1 공식 문서 기준 기본값 (48개)
설정명 기본값 범위 · 타입 설명 튜닝 포인트
bootstrap.servers 필수 · 기본값 없음 list 초기 연결용 host:port 목록 부하 분산이 아니라 부트스트랩 단일 장애점 제거가 목적입니다. 2개 이상
key.serializer 필수 · 기본값 없음 class 키 직렬화 클래스
value.serializer 필수 · 기본값 없음 class 값 직렬화 클래스
acks all string
[all, -1, 0, 1]
쓰기 성공으로 볼 확인 수준. 0 / 1 / all 4.x 기본값은 all입니다. 3.0 이전 자료의 1과 다릅니다
enable.idempotence true boolean 멱등 프로듀서. 파티션 단위 중복 제거와 순서 보장 기본 true. acks=all·retries>0·in-flight ≤ 5가 필수 조건
max.in.flight.requests.per.connection 5 int
[1,...]
응답 대기 중 허용할 요청 수 멱등성이 켜져 있으면 5 이하여야 합니다. 6 이상은 ConfigException
retries 2147483647 int
[0,...,2147483647]
전송 재시도 횟수 4.x 기본값은 Integer.MAX_VALUE. 실질 상한은 delivery.timeout.ms입니다
delivery.timeout.ms 120000
(2 minutes)
int
[0,...]
send()부터 성공·실패 확정까지의 총 시간 request.timeout.ms + linger.ms 이상이어야 합니다. 재시도의 진짜 상한
request.timeout.ms 30000
(30 seconds)
int
[0,...]
요청 하나에 대한 응답 대기 시간
linger.ms 5 long
[0,...]
배치를 채우기 위해 전송을 미루는 시간 4.0에서 0 → 5로 변경. 지연이 극도로 민감하면 명시적으로 0
batch.size 16384 int
[0,...]
파티션별 배치의 바이트 상한 처리량을 올리려면 linger.ms와 함께 올려야 효과가 있습니다
buffer.memory 33554432 long
[0,...]
전송 대기 레코드를 담는 총 버퍼 크기 고갈되면 max.block.ms 동안 블록한 뒤 예외
max.block.ms 60000
(1 minute)
long
[0,...]
send()·partitionsFor()가 블록할 최대 시간 메타데이터 조회 실패도 이 값에 걸립니다
max.request.size 1048576 int
[0,...]
요청 하나의 최대 바이트 토픽 max.message.bytes와 별개입니다. 둘 다 맞춰야 합니다
compression.type none string
[none, gzip, snappy, lz4, zstd]
none / gzip / snappy / lz4 / zstd lz4·zstd가 실무 기본 선택. 압축은 배치 단위입니다
compression.gzip.level -1 int
[1,...,9] or -1
gzip 압축 레벨
compression.lz4.level 9 int
[1,...,17]
lz4 압축 레벨
compression.zstd.level 3 int
[-131072,...,22]
zstd 압축 레벨
partitioner.class null class 커스텀 파티셔너. 미지정이면 내장 로직 키가 있으면 키 해시, 없으면 배치 친화적으로 분배
partitioner.ignore.keys false boolean 키를 무시하고 분배 true로 두면 키 기반 순서 보장이 깨집니다
partitioner.adaptive.partitioning.enable true boolean 브로커 응답성에 따라 분배를 조정
partitioner.availability.timeout.ms 0 long
[0,...]
이 시간 동안 응답 없는 파티션을 회피 (adaptive 필요)
transactional.id null string
non-empty string
트랜잭션 프로듀서 식별자. 지정하면 EOS 가능 인스턴스마다 안정적으로 같은 값이어야 좀비 펜싱이 동작합니다
transaction.timeout.ms 60000
(1 minute)
int 트랜잭션이 열려 있을 수 있는 최대 시간 브로커 transaction.max.timeout.ms를 넘으면 거부됩니다
transaction.two.phase.commit.enable false boolean 2PC 스타일 외부 조정 트랜잭션
metadata.max.age.ms 300000
(5 minutes)
long
[0,...]
메타데이터 강제 갱신 주기
metadata.max.idle.ms 300000
(5 minutes)
long
[5000,...]
유휴 토픽의 메타데이터를 버리기까지의 시간
metadata.recovery.strategy rebootstrap string
(case insensitive) [REBOOTSTRAP, NONE]
모든 노드 연결 실패 시 복구 방식
retry.backoff.ms 100 long
[0,...]
재시도 사이 대기 시간
retry.backoff.max.ms 1000
(1 second)
long
[0,...]
재시도 백오프 상한
reconnect.backoff.ms 50 long
[0,...]
재연결 대기 시간
reconnect.backoff.max.ms 1000
(1 second)
long
[0,...]
재연결 백오프 상한
connections.max.idle.ms 540000
(9 minutes)
long 유휴 연결 종료 시간
client.id ""
(빈 값)
string 요청에 실려 서버 로그·쿼터에 쓰이는 논리 이름 쿼터·메트릭 식별에 필수입니다. 반드시 설정하세요
client.dns.lookup use_all_dns_ips string
[use_all_dns_ips, resolve_canonical_bootstrap_servers_only]
DNS 결과 처리 방식
interceptor.classes ""
(빈 값)
list 프로듀서 인터셉터 목록
security.protocol PLAINTEXT string
(case insensitive) [SASL_SSL, PLAINTEXT, SSL, SASL_PLAINTEXT]
PLAINTEXT / SSL / SASL_PLAINTEXT / SASL_SSL
sasl.mechanism GSSAPI string SASL 메커니즘 기본값이 GSSAPI이므로 SCRAM·PLAIN은 반드시 명시해야 합니다
sasl.jaas.config null password JAAS 로그인 설정을 프로퍼티로 인라인 지정
ssl.keystore.location null string 클라이언트 인증서 키스토어 경로 (mTLS)
ssl.truststore.location null string 트러스트스토어 경로
ssl.endpoint.identification.algorithm https string 서버 호스트명 검증 알고리즘 빈 문자열로 두면 검증을 끕니다. 운영에서는 https 유지
ssl.protocol TLSv1.3 string SSLContext 프로토콜
ssl.enabled.protocols TLSv1.2,TLSv1.3 list 허용할 TLS 프로토콜 목록
send.buffer.bytes 131072
(128 kibibytes)
int
[-1,...]
SO_SNDBUF
receive.buffer.bytes 32768
(32 kibibytes)
int
[-1,...]
SO_RCVBUF
metrics.recording.level INFO string
[INFO, DEBUG, TRACE]
메트릭 수집 상세도 DEBUG로 올리면 파티션별 메트릭까지 나옵니다
enable.metrics.push true boolean 브로커로 클라이언트 메트릭 푸시 (KIP-714)

Consumer 설정

Consumer 설정 — Apache Kafka 4.3.1 공식 문서 기준 기본값 (44개)
설정명 기본값 범위 · 타입 설명 튜닝 포인트
bootstrap.servers 필수 · 기본값 없음 list 초기 연결용 host:port 목록
key.deserializer 필수 · 기본값 없음 class 키 역직렬화 클래스 역직렬화 실패는 RecordDeserializationException으로 poll 루프를 막습니다
value.deserializer 필수 · 기본값 없음 class 값 역직렬화 클래스
group.id null string 컨슈머 그룹 식별자 없으면 그룹 관리·오프셋 커밋을 못 합니다(assign() 전용)
group.protocol classic string
(case insensitive) [CONSUMER, CLASSIC]
classic / consumer(KIP-848) 기본값은 여전히 classic입니다. 4.0 GA지만 기본이 아닙니다
group.instance.id null string
non-empty string
정적 멤버십 ID 지정하면 재시작이 리밸런스를 일으키지 않습니다(세션 타임아웃 내)
group.remote.assignor null string 브로커 측 할당자 이름 (새 프로토콜) group.protocol=consumer에서만 의미가 있습니다
partition.assignment.strategy class org.apache.kafka.clients.consumer.RangeAssignor,class org.apache.kafka.clients.consumer.CooperativeStickyAssignor list 할당 전략 목록 (classic 프로토콜) 새 프로토콜에서는 무시됩니다. 협조적 리밸런스 전환은 롤링 2회
session.timeout.ms 45000
(45 seconds)
int 하트비트가 끊긴 뒤 멤버를 죽었다고 볼 시간 heartbeat.interval.ms의 3배 이상 권장. 새 프로토콜에서는 브로커가 관리
heartbeat.interval.ms 3000
(3 seconds)
int 하트비트 전송 간격
max.poll.interval.ms 300000
(5 minutes)
int
[1,...]
연속된 poll() 사이 허용 시간 처리 시간이 길면 여기서 쫓겨납니다. 세션 타임아웃과 혼동 금지
max.poll.records 500 int
[1,...]
poll() 한 번에 반환할 최대 레코드 수 리밸런스가 반복되면 가장 먼저 줄여 볼 값
enable.auto.commit true boolean 주기적 오프셋 자동 커밋 true는 처리 전 커밋 위험(유실). 정확성이 필요하면 수동 커밋
auto.commit.interval.ms 5000
(5 seconds)
int
[0,...]
자동 커밋 주기
auto.offset.reset latest string
[latest, earliest, none, by_duration:PnDTnHnMn.nS]
커밋된 오프셋이 없거나 범위를 벗어났을 때. earliest / latest / none / by_duration:… 기본 latest. 새 그룹으로 붙으면 과거 데이터를 건너뜁니다
isolation.level read_uncommitted string
[read_committed, read_uncommitted]
read_uncommitted / read_committed EOS 파이프라인의 컨슈머는 반드시 read_committed. 기본값이 아닙니다
fetch.min.bytes 1 int
[0,...]
브로커가 응답을 만들기 위해 모을 최소 바이트 올리면 요청 수가 줄고 지연이 늘어납니다
fetch.max.wait.ms 500 int
[0,...]
fetch.min.bytes가 안 차도 기다릴 최대 시간
fetch.max.bytes 52428800
(50 mebibytes)
int
[0,...]
한 fetch 요청의 최대 바이트(전체) 첫 파티션의 첫 배치는 이 값을 넘어도 반환되어 진행이 보장됩니다
max.partition.fetch.bytes 1048576
(1 mebibyte)
int
[0,...]
파티션당 fetch 최대 바이트 큰 레코드를 다루면 이 값과 max.message.bytes를 함께 맞춥니다
check.crcs true boolean 레코드 CRC 검증 끄면 CPU를 아끼지만 손상 감지를 포기합니다
client.rack ""
(빈 값)
string 컨슈머의 랙 ID 브로커 replica.selector.class와 함께 근접 레플리카에서 읽습니다
allow.auto.create.topics true boolean 구독한 토픽이 없을 때 자동 생성 요청 오타 토픽을 만듭니다. false 권장
exclude.internal.topics true boolean 패턴 구독에서 내부 토픽 제외
default.api.timeout.ms 60000
(1 minute)
int
[0,...]
타임아웃 인자가 없는 API의 기본 타임아웃
request.timeout.ms 30000
(30 seconds)
int
[0,...]
요청 응답 대기 시간
metadata.max.age.ms 300000
(5 minutes)
long
[0,...]
메타데이터 강제 갱신 주기 패턴 구독에서 새 토픽 발견 지연의 원인
metadata.recovery.strategy rebootstrap string
(case insensitive) [REBOOTSTRAP, NONE]
전 노드 연결 실패 시 복구 방식
retry.backoff.ms 100 long
[0,...]
재시도 대기 시간
retry.backoff.max.ms 1000
(1 second)
long
[0,...]
재시도 백오프 상한
reconnect.backoff.ms 50 long
[0,...]
재연결 대기 시간
reconnect.backoff.max.ms 1000
(1 second)
long
[0,...]
재연결 백오프 상한
connections.max.idle.ms 540000
(9 minutes)
long 유휴 연결 종료 시간
receive.buffer.bytes 65536
(64 kibibytes)
int
[-1,...]
SO_RCVBUF
send.buffer.bytes 131072
(128 kibibytes)
int
[-1,...]
SO_SNDBUF
client.id ""
(빈 값)
string 논리 클라이언트 이름 쿼터·메트릭 식별에 씁니다
client.dns.lookup use_all_dns_ips string
[use_all_dns_ips, resolve_canonical_bootstrap_servers_only]
DNS 결과 처리 방식
interceptor.classes ""
(빈 값)
list 컨슈머 인터셉터 목록
security.protocol PLAINTEXT string
(case insensitive) [SASL_SSL, PLAINTEXT, SSL, SASL_PLAINTEXT]
보안 프로토콜
sasl.mechanism GSSAPI string SASL 메커니즘
share.acknowledgement.mode implicit string
[implicit, explicit]
Share Group ack 방식. implicit / explicit KIP-932 Share Consumer 전용. 레코드 단위 ack 제어
share.acquire.mode BATCH_OPTIMIZED string
[batch_optimized, record_limit]
Share Group 레코드 획득 방식
metrics.recording.level INFO string
[INFO, DEBUG, TRACE]
메트릭 수집 상세도
enable.metrics.push true boolean 브로커로 클라이언트 메트릭 푸시

Kafka Streams 설정

Streams는 내부적으로 프로듀서·컨슈머·Admin 클라이언트를 만들기 때문에 producer.·consumer.·admin. 접두어로 위의 클라이언트 설정을 그대로 넘길 수 있습니다. DSL 연산자별 리파티션 유발 여부는 Streams 치트시트를 보세요.

Kafka Streams 설정 — Apache Kafka 4.3.1 공식 문서 기준 기본값 (43개)
설정명 기본값 범위 · 타입 설명 튜닝 포인트
application.id 필수 · 기본값 없음 string 애플리케이션 식별자. 컨슈머 group.id와 내부 토픽 접두어로 쓰입니다 바꾸면 완전히 새 애플리케이션이 됩니다(상태·오프셋 초기화)
bootstrap.servers 필수 · 기본값 없음 list 초기 연결용 host:port 목록
num.stream.threads 1 int 인스턴스당 스트림 스레드 수 전체 병렬성 상한은 파티션 수입니다. 스레드를 그 이상 늘려도 유휴만 늘어납니다
processing.guarantee at_least_once string
[at_least_once, exactly_once_v2]
at_least_once / exactly_once_v2 기본값이 at_least_once입니다. EOS는 명시해야 켜집니다
replication.factor -1 int 내부 토픽(changelog·repartition) 복제 계수. -1은 브로커 기본값 사용 운영에서는 3으로 명시하세요. 브로커 기본이 1이면 상태 유실 위험
state.dir ${java.io.tmpdir} string RocksDB 상태 저장소 디렉터리 컨테이너에서 임시 볼륨을 쓰면 재시작마다 전체 복구가 일어납니다
num.standby.replicas 0 int 태스크별 hot standby 수 1로 두면 페일오버 복구 시간이 극적으로 줄어듭니다
max.warmup.replicas 2 int
[1,...]
동시에 워밍업할 수 있는 태스크 수 스케일 아웃 속도와 복제 부하의 트레이드오프
acceptable.recovery.lag 10000 long
[0,...]
태스크를 "따라잡았다"고 볼 changelog lag 이 값 이내면 활성 태스크로 승격됩니다
probing.rebalance.interval.ms 600000
(10 minutes)
long
[60000,...]
워밍업 진행을 확인하는 리밸런스 주기
commit.interval.ms 30000
(30 seconds)
long
[0,...]
오프셋·상태 커밋 주기 exactly_once_v2에서는 이 값이 종단 지연의 하한이 됩니다
statestore.cache.max.bytes 10485760
(10 mebibytes)
long
[0,...]
인스턴스 전체 상태 저장소 캐시 크기 크게 하면 downstream 갱신이 줄고(중간 결과 억제) 지연이 늘어납니다
cache.max.bytes.buffering 10485760 long
[0,...]
(deprecated) 이전 이름의 캐시 설정 신규 코드에서는 statestore.cache.max.bytes를 쓰세요
poll.ms 100 long 내부 컨슈머 poll() 블록 시간
buffered.records.per.partition 1000 int 파티션당 버퍼링할 레코드 수
max.task.idle.ms 0 long 한쪽 입력이 비었을 때 조인·병합에서 기다릴 시간 양쪽 토픽 시간 정렬이 필요한 조인에서 순서 오류를 줄입니다
task.timeout.ms 300000
(5 minutes)
long
[0,...]
태스크가 재시도 가능한 오류로 멈춰 있을 수 있는 시간
topology.optimization none string
[all, none, reuse.ktable.source.topics, merge.repartition.topics, single.store.self.join]
토폴로지 최적화. none / all all은 불필요한 repartition 토픽을 줄입니다. 기존 앱에 켜면 호환 문제 주의
default.key.serde null class 기본 키 Serde
default.value.serde null class 기본 값 Serde
default.timestamp.extractor org.apache.kafka.streams.processor.FailOnInvalidTimestamp class 기본 타임스탬프 추출기 기본은 잘못된 타임스탬프에서 실패합니다(FailOnInvalidTimestamp)
deserialization.exception.handler org.apache.kafka.streams.errors.LogAndFailExceptionHandler class 역직렬화 예외 처리기 기본은 로그 후 실패. 손상 레코드를 건너뛰려면 교체해야 합니다
production.exception.handler org.apache.kafka.streams.errors.DefaultProductionExceptionHandler class 생산 예외 처리기
processing.exception.handler org.apache.kafka.streams.errors.LogAndFailProcessingExceptionHandler class 처리 로직 예외 처리기 기본은 로그 후 실패
processing.exception.handler.global.enabled false boolean 전역 처리 예외 핸들러 활성화
errors.dead.letter.queue.topic.name null string DLQ 토픽 이름 설정하지 않으면 DLQ가 동작하지 않습니다
default.dsl.store rocksDB string
[rocksDB, in_memory]
DSL 기본 저장소 타입 in_memory로 바꾸면 디스크는 안 쓰지만 힙이 커집니다
dsl.store.suppliers.class org.apache.kafka.streams.state.BuiltInDslStoreSuppliers$RocksDBDslStoreSuppliers class DSL 저장소 공급자 클래스
rocksdb.config.setter null class RocksDB 옵션 커스터마이저 블록 캐시·write buffer 튜닝 지점. 메모리 폭주의 원인이기도 합니다
windowstore.changelog.additional.retention.ms 86400000
(1 day)
long 윈도 스토어 changelog에 더할 추가 보관 시간
repartition.purge.interval.ms 30000
(30 seconds)
long
[0,...]
repartition 토픽 purge 요청 주기
state.cleanup.delay.ms 600000
(10 minutes)
long 태스크 이관 후 로컬 상태를 지우기까지 대기
rack.aware.assignment.strategy none string
[none, min_traffic, balance_subtopology]
랙 인식 태스크 할당 전략 멀티 AZ에서 크로스 AZ 트래픽 비용을 줄입니다
rack.aware.assignment.tags ""
(빈 값)
list
List containing maximum of 5 elements
랙 인식에 쓸 클라이언트 태그
application.server ""
(빈 값)
string 인터랙티브 쿼리용 host:port 설정하면 다른 인스턴스로 쿼리를 라우팅할 수 있습니다
group.protocol classic string
(case insensitive) [STREAMS, CLASSIC]
Streams가 쓰는 그룹 프로토콜 Streams Rebalance Protocol 관련. 기본은 classic
task.assignor.class null string 커스텀 태스크 할당자
default.deserialization.exception.handler org.apache.kafka.streams.errors.LogAndFailExceptionHandler class (deprecated) 이전 이름의 역직렬화 예외 처리기 신규 코드에서는 deserialization.exception.handler를 쓰세요
log.summary.interval.ms 120000
(2 minutes)
long 요약 로그 출력 주기
upgrade.from null string
[null, 2.4, 2.5, 2.6, 2.7, 2.8, 3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 4.0, 4.1, 4.2]
롤링 업그레이드 시 이전 버전 표기 메이저 업그레이드에서 2단계 롤링에 필요합니다
ensure.explicit.internal.resource.naming false boolean 내부 리소스 이름을 명시하도록 강제
request.timeout.ms 40000
(40 seconds)
int
[0,...]
요청 응답 대기 시간
metrics.recording.level INFO string
[INFO, DEBUG, TRACE]
메트릭 수집 상세도

Kafka Connect 설정

REST API 전체 표와 SMT 목록은 Connect 치트시트에 있습니다.

Kafka Connect 설정 (워커 + 커넥터) — Apache Kafka 4.3.1 공식 문서 기준 기본값 (54개)
설정명 기본값 범위 · 타입 설명 튜닝 포인트
bootstrap.servers 필수 · 기본값 없음 list 초기 연결용 host:port 목록
group.id 필수 · 기본값 없음 string 분산 모드 워커 그룹 ID 컨슈머 그룹 ID와 겹치면 안 됩니다
key.converter 필수 · 기본값 없음 class 키 컨버터 클래스 워커 기본값. 커넥터별로 오버라이드 가능합니다
value.converter 필수 · 기본값 없음 class 값 컨버터 클래스 JSON 컨버터는 schemas.enable도 함께 봐야 합니다
header.converter org.apache.kafka.connect.storage.SimpleHeaderConverter class 헤더 컨버터 클래스
config.storage.topic 필수 · 기본값 없음 string 커넥터 설정을 저장할 내부 토픽 파티션 1개 · cleanup.policy=compact가 필수입니다
config.storage.replication.factor 3 short
Positive number not larger than the number of brokers in the Kafka cluster, or -1 to use the broker's default
설정 토픽 복제 계수
offset.storage.topic 필수 · 기본값 없음 string source 커넥터 오프셋을 저장할 내부 토픽 sink는 여기가 아니라 __consumer_offsets를 씁니다
offset.storage.partitions 25 int
Positive number, or -1 to use the broker's default
오프셋 토픽 파티션 수
offset.storage.replication.factor 3 short
Positive number not larger than the number of brokers in the Kafka cluster, or -1 to use the broker's default
오프셋 토픽 복제 계수
status.storage.topic 필수 · 기본값 없음 string 커넥터·태스크 상태를 저장할 내부 토픽
status.storage.partitions 5 int
Positive number, or -1 to use the broker's default
상태 토픽 파티션 수
status.storage.replication.factor 3 short
Positive number not larger than the number of brokers in the Kafka cluster, or -1 to use the broker's default
상태 토픽 복제 계수
offset.flush.interval.ms 60000
(1 minute)
long 오프셋 커밋 주기
offset.flush.timeout.ms 5000
(5 seconds)
long 오프셋 커밋 완료 대기 시간 타임아웃이 반복되면 커밋이 계속 실패해 재처리가 늘어납니다
plugin.path null list 커넥터 플러그인 디렉터리 목록 클래스로딩 격리의 근거. 여기에 없으면 커넥터가 보이지 않습니다
plugin.discovery hybrid_warn string
(case insensitive) [ONLY_SCAN, SERVICE_LOAD, HYBRID_WARN, HYBRID_FAIL]
플러그인 검색 모드
listeners http://:8083 list
List of comma-separated URLs, ex: http://localhost:8080,https://localhost:8443.
REST 인터페이스 바인딩 주소
rest.advertised.host.name null string 다른 워커에게 알릴 호스트명 컨테이너에서 내부 주소를 알리면 워커 간 요청 전달이 깨집니다
rest.advertised.port null int 다른 워커에게 알릴 포트
rest.advertised.listener null string 알릴 리스너(http/https)
admin.listeners null list 관리용(/admin/loggers) 별도 리스너
connect.protocol sessioned string
[eager, compatible, sessioned]
워커 그룹 프로토콜 sessioned는 워커 간 요청에 서명을 씁니다
scheduled.rebalance.max.delay.ms 300000
(5 minutes)
int
[0,...,2147483647]
워커 이탈 시 태스크 재배치를 미루는 최대 시간 롤링 재시작 중 불필요한 재배치를 막습니다
rebalance.timeout.ms 60000
(1 minute)
int 리밸런스 완료 대기 시간
session.timeout.ms 10000
(10 seconds)
int 워커 세션 타임아웃
heartbeat.interval.ms 3000
(3 seconds)
int 워커 하트비트 간격
task.shutdown.graceful.timeout.ms 5000
(5 seconds)
long 태스크 정상 종료 대기 시간
exactly.once.source.support disabled string
(case insensitive) [DISABLED, ENABLED, PREPARING]
source 커넥터 EOS 지원. disabled / preparing / enabled 전체 워커를 2단계 롤링으로 켜야 합니다
connector.client.config.override.policy All string 커넥터가 클라이언트 설정을 덮어쓸 수 있는 범위 None으로 좁히면 커넥터별 보안 설정을 막을 수 있습니다
topic.creation.enable true boolean 커넥터의 토픽 자동 생성 허용
topic.tracking.enable true boolean 커넥터가 쓰는 토픽 추적 GET /connectors/{name}/topics의 근거 데이터
topic.tracking.allow.reset true boolean 토픽 추적 리셋 API 허용
inter.worker.key.ttl.ms 3600000
(1 hour)
int
[0,...,2147483647]
워커 간 서명 키 유효 기간
name 필수 · 기본값 없음 string
non-empty string without ISO control characters
커넥터 이름 (커넥터 설정) REST 경로에 그대로 들어갑니다. URL 안전한 이름을 쓰세요
connector.class 필수 · 기본값 없음 string 커넥터 구현 클래스 (커넥터 설정)
tasks.max 1 int
[1,...]
커넥터가 만들 최대 태스크 수 (커넥터 설정) 실제 병렬성 상한은 source의 분할 단위, sink는 파티션 수입니다
tasks.max.enforce true boolean tasks.max를 초과하는 태스크 생성을 막을지
topics ""
(빈 값)
list sink 커넥터가 읽을 토픽 목록 topics.regex와 동시에 쓸 수 없습니다
topics.regex ""
(빈 값)
string
valid regex
sink 커넥터가 읽을 토픽 정규식
transforms ""
(빈 값)
list
non-null string, unique transformation aliases
SMT 별칭 목록 (적용 순서) 별칭마다 transforms.{별칭}.type이 필요합니다
predicates ""
(빈 값)
list
non-null string, unique predicate aliases
SMT 조건 별칭 목록 transforms.{별칭}.predicate + negate와 함께 씁니다
errors.tolerance none string
[none, all]
none / all none이면 첫 오류에서 태스크가 FAILED가 됩니다
errors.retry.timeout 0 long 실패한 작업을 재시도할 총 시간. 0은 재시도 없음
errors.retry.delay.max.ms 60000
(1 minute)
long 재시도 사이 최대 지연
errors.log.enable false boolean 오류를 로그로 남길지 DLQ를 쓸 때도 켜 두면 원인 추적이 쉬워집니다
errors.log.include.messages false boolean 로그에 레코드 내용을 포함할지 개인정보가 로그로 새어 나갈 수 있습니다
errors.deadletterqueue.topic.name ""
(빈 값)
string DLQ 토픽 이름 (sink 전용) 비워 두면 DLQ가 동작하지 않습니다. errors.tolerance=all과 함께
errors.deadletterqueue.topic.replication.factor 3 short DLQ 토픽 복제 계수
errors.deadletterqueue.context.headers.enable false boolean DLQ 레코드에 오류 컨텍스트 헤더 추가 원본 토픽·파티션·오프셋·예외를 헤더로 남깁니다. 반드시 켜세요
config.action.reload restart string
[none, restart]
외부 설정이 바뀔 때의 동작
exactly.once.support requested string
(case insensitive) [REQUIRED, REQUESTED]
source 커넥터의 EOS 요구 수준
transaction.boundary poll string
(case insensitive) [INTERVAL, POLL, CONNECTOR]
source EOS 트랜잭션 경계. poll / interval / connector
offsets.storage.topic null string
non-empty string
커넥터별 오프셋 토픽 오버라이드

공식 문서 출처

이 페이지의 모든 기본값은 Apache Kafka 4.3.1 배포판에 포함된 공식 설정 문서에서 확인했습니다. 확인하지 못한 설정은 표에 넣지 않았습니다.