이 페이지의 목차

  1. 외워야 할 숫자 25개 — 값만 모아 둔 표
  2. 설정 기본값 총정리 — 프로듀서 · 컨슈머 · 브로커 · 토픽 · Streams · Connect
  3. Application Development (28%)
  4. Fundamentals (23%)
  5. Kafka Connect (15%)
  6. Application Observability (13%)
  7. Kafka Streams (12%)
  8. Application Testing (8%)
  9. API · 워크플로 호출 순서 — list order 유형 대비
  10. 예외 클래스와 원인 — matching 유형 대비
  11. 버전 사실 10개
  12. 시험장 들어가기 전 마지막 확인

외워야 할 숫자 25개

숫자만 모아 둔 표 — 값을 가리고 스스로 답해 보세요
항목
linger.ms5 (4.0에서 0→5)
batch.size16384
buffer.memory33554432 (32MB)
max.block.ms60000
max.in.flight.requests.per.connection5 (멱등성 시 상한)
request.timeout.ms30000
delivery.timeout.ms120000
retries2147483647
max.request.size1048576 (프로듀서)
transaction.timeout.ms60000
session.timeout.ms45000
heartbeat.interval.ms3000
max.poll.interval.ms300000 (5분)
max.poll.records500
auto.commit.interval.ms5000
fetch.max.bytes52428800 (50MB)
max.partition.fetch.bytes1048576 (1MB)
message.max.bytes1048588 (1MB 아님)
retention.ms604800000 (7일)
segment.bytes1073741824 (1GiB)
delete.retention.ms86400000 (1일)
replica.lag.time.max.ms30000
offsets.retention.minutes10080 (7일)
컨트롤러 쿼럼 권장 수3 또는 5 (홀수)
EOS 최소 브로커 수3 (transaction.state.log.replication.factor=3)

설정 기본값 총정리

CCDAK 설정값 관계도 — 내구성 · 재시도 · 배치 · 메시지 크기 · 컨슈머 생존 5개 클러스터 프로듀서 · 브로커 · 토픽 · 컨슈머 설정 23개를 다섯 묶음으로 나누고, 공식 문서에 명시된 의존 관계만 화살표로 이은 관계도입니다. 소속은 색과 기호로 구분하며 세모는 프로듀서, 네모는 브로커, 동그라미는 토픽, 마름모는 컨슈머입니다. 내구성 묶음에서는 acks=all 일 때만 min.insync.replicas 를 검사하고, min.insync.replicas 는 replication.factor 이하여야 하며, unclean.leader.election.enable 이 true 면 ISR 밖 레플리카가 리더가 되어 그 보장이 깨집니다. 재시도 예산 묶음에서는 delivery.timeout.ms 가 request.timeout.ms 와 linger.ms 의 합 이상이어야 하고, enable.idempotence 는 acks=all 과 max.in.flight 5 이하를 요구합니다. 배치 묶음에서는 batch.size 도달과 linger.ms 만료 중 먼저 오는 쪽에 전송하며 압축은 배치 단위입니다. 메시지 크기 묶음에서는 max.request.size 와 message.max.bytes(토픽 max.message.bytes 가 덮어씀) 두 계열만 하드 상한이고 fetch 쪽 세 설정은 첫 배치가 더 커도 반환해 진행을 보장합니다. 컨슈머 생존 묶음에서는 하트비트 축과 poll 축이 서로 달라 처리가 길어지면 max.poll.interval.ms 쪽이 먼저 터집니다. CCDAK 설정값 관계도 — 실제로 서로를 제약하는 설정만 이었습니다 ▲ 프로듀서 ■ 브로커 ● 토픽 ◆ 컨슈머 노드를 클릭하면 연결된 설정만 남습니다 ⇒ 필요 조건 ≤ ≥ 값 상한 · 하한 ⊂ 예산 · 용량에 포함 ⊕ 둘 중 먼저 오는 쪽 ⊳ 토픽이 브로커 값을 덮어씀 ⊗ 한 번에 처리할 양 ⨯ 보장을 무력화(위험) ∥ 직접 의존 없음 1. 내구성 — 데이터를 잃지 않으려면 acks ▲ 기본 all min.insync. replicas ■ 기본 1 replication. factor ● 기본 생성 시 지정 unclean.leader. election.enable ■ 기본 false acks=all 일 때만 min.insync.replicas 를 검사 — ISR 이 부족하면 NotEnoughReplicas 로 거부됩니다 min.insync.replicas ≤ replication.factor · 권장 RF 3 + min.insync 2 · unclean=true 면 이 보장이 깨집니다 2. 재시도 예산 — 언제까지 다시 보내는가 retries ▲ 기본 2147483647 request.timeout.ms ▲ 기본 30000 delivery.timeout.ms ▲ 기본 120000 enable.idempotence ▲ 기본 true max.in.flight.requests. per.connection ▲ 기본 5 delivery.timeout.ms ≥ request.timeout.ms + linger.ms · 재시도는 이 예산 안에서만 반복됩니다 enable.idempotence=true 는 acks=all · retries 0 초과 · max.in.flight ≤ 5 를 요구합니다 3. 배치 — 언제 묶어서 보내는가 linger.ms ▲ 기본 5 batch.size ▲ 기본 16384 buffer.memory ▲ 기본 33554432 compression.type ▲ 기본 none batch.size 도달과 linger.ms 만료 중 먼저 오는 쪽에 전송하고, 압축은 배치 단위로 수행됩니다 buffer.memory 가 차면 send() 가 max.block.ms(기본 60000) 만큼 블록된 뒤 예외를 던집니다 4. 메시지 크기 — 어디서 막히는가 max.request.size ▲ 기본 1048576 message.max.bytes ■ 기본 1048588 max.message.bytes ● 기본 1048588 replica.fetch.max.bytes ■ 기본 1048576 max.partition.fetch. bytes ◆ 기본 1048576 fetch.max.bytes ◆ 기본 52428800 하드 상한은 max.request.size 와 message.max.bytes(토픽 max.message.bytes 가 덮어씀) 두 계열뿐 · 넘으면 거부 fetch 쪽 3개는 하드 상한이 아닙니다 — 첫 배치가 더 크면 그대로 반환해 진행을 보장합니다 5. 컨슈머 생존 — 왜 그룹에서 빠지는가 heartbeat. interval.ms ◆ 기본 3000 session.timeout. ms ◆ 기본 45000 max.poll. interval.ms ◆ 기본 300000 max.poll.records ◆ 기본 500 heartbeat.interval.ms 는 session.timeout.ms 의 1/3 이하 권장 — 하트비트는 백그라운드 스레드가 보냅니다 max.poll.records × 건당 처리시간 이 max.poll.interval.ms 를 넘으면 poll 축에서 이탈합니다 기본값은 Apache Kafka 4.3 기준 · linger.ms 는 4.0 에서 0 → 5, acks 와 enable.idempotence 는 3.0 에서 바뀜
설정값 관계도 — 프로듀서 · 브로커 · 토픽 · 컨슈머 설정이 서로 어떻게 얽히는지 한 장으로. acksmin.insync.replicasreplication.factor, max.request.sizemessage.max.bytesfetch.max.bytesreplica.fetch.max.bytes, linger.msbatch.sizedelivery.timeout.ms 묶음이 보입니다. 시험 직전 한 장 요약으로 가장 유용한 그림입니다.

프로듀서

Producer (Apache Kafka 4.3)
설정기본값한 줄
acksall3.0부터. all일 때만 minISR 검사
enable.idempotencetruein-flight≤5, acks=all, retries>0 강제
linger.ms54.0에서 변경. batch.size와 OR 조건
batch.size16384파티션별 배치 크기
buffer.memory33554432고갈 시 send() 블로킹
max.block.ms60000버퍼·메타데이터 대기 상한
max.in.flight…56 이상이면 ConfigException
request.timeout.ms30000요청 1회
delivery.timeout.ms120000전체 예산
retries2147483647사실상 무한 → 시간이 상한
retry.backoff.ms100
max.request.size1048576브로커 값과 다름
compression.typenone토픽 기본값은 producer
partitioner.classnull내장 로직 (키 해시 / sticky)
transactional.idnull지정 시 트랜잭션 사용 가능
transaction.timeout.ms60000초과 시 코디네이터가 abort
metadata.max.age.ms300000메타데이터 강제 갱신 주기

컨슈머

Consumer (Apache Kafka 4.3)
설정기본값한 줄
group.protocolclassicKIP-848은 GA지만 기본값 아님
group.idnullsubscribe()에는 필수
group.instance.idnullstatic membership
session.timeout.ms45000하트비트 축
heartbeat.interval.ms3000session의 1/3 이하
max.poll.interval.ms300000poll 축
max.poll.records500poll 초과의 1차 처방
enable.auto.committrue트랜잭션 시 false
auto.commit.interval.ms5000
auto.offset.resetlatest커밋 없거나 범위 밖일 때만
isolation.levelread_uncommitted컨슈머 설정
partition.assignment.strategy[RangeAssignor,
CooperativeStickyAssignor]
classic에서만 유효
fetch.min.bytes1fetch.max.wait.ms=500
fetch.max.bytes52428800요청 전체
max.partition.fetch.bytes1048576파티션당
allow.auto.create.topicstrue오타 토픽 생성 위험

브로커 · 토픽

Broker · Topic (Apache Kafka 4.3)
설정소속기본값
num.partitions브로커1
default.replication.factor브로커1
auto.create.topics.enable브로커true
message.max.bytes브로커1048588
replica.fetch.max.bytes브로커1048576
replica.lag.time.max.ms브로커30000
offsets.retention.minutes브로커10080
num.network.threads브로커3
num.io.threads브로커8
num.replica.fetchers브로커1
group.initial.rebalance.delay.ms브로커3000
transaction.state.log.replication.factor브로커3
transaction.state.log.min.isr브로커2
min.insync.replicas브로커·토픽1
unclean.leader.election.enable브로커·토픽false
cleanup.policy토픽delete
retention.ms토픽604800000
retention.bytes토픽-1 (파티션당)
segment.bytes토픽1073741824
segment.ms토픽604800000
max.message.bytes토픽1048588
min.cleanable.dirty.ratio토픽0.5
delete.retention.ms토픽86400000
min.compaction.lag.ms토픽0
compression.type토픽producer
message.timestamp.type토픽CreateTime
remote.storage.enable토픽false

Streams · Connect

Streams · Connect (Apache Kafka 4.3)
설정소속기본값
processing.guaranteeStreamsat_least_once
num.stream.threadsStreams1
num.standby.replicasStreams0
commit.interval.msStreams30000
replication.factorStreams-1 (브로커 기본값)
statestore.cache.max.bytesStreams10485760
state.dirStreams임시 디렉터리
default.key.serdeStreamsnull (필수 지정)
topology.optimizationStreamsnone
max.task.idle.msStreams0
acceptable.recovery.lagStreams10000
probing.rebalance.interval.msStreams600000
offset.flush.interval.msConnect 워커60000
offset.storage.partitionsConnect 워커25
status.storage.partitionsConnect 워커5
config.storage.replication.factorConnect 워커3
rebalance.timeout.msConnect 워커60000
plugin.pathConnect 워커null
errors.toleranceConnect 커넥터none
errors.log.enableConnect 커넥터false
errors.retry.timeoutConnect 커넥터0
errors.deadletterqueue.topic.nameConnect sink"" (비활성)
errors.deadletterqueue.
context.headers.enable
Connect sinkfalse
exactly.once.source.supportConnect 워커disabled

Application Development — 28%

프로듀서

컨슈머

전달 보장 · 트랜잭션

Fundamentals — 23%

복제 · 오프셋

메시지 크기 5+1개

이름 · 소속 · 값
설정소속
max.request.size프로듀서1048576
message.max.bytes브로커1048588
max.message.bytes토픽1048588
max.partition.fetch.bytes컨슈머1048576
fetch.max.bytes컨슈머52428800
replica.fetch.max.bytes브로커(팔로워)1048576

리텐션 · 컴팩션

스키마 호환성

모드 · 의미 · 배포 순서
모드의미먼저 배포
BACKWARD (기본)새 스키마로 옛 데이터 읽기컨슈머
FORWARD옛 스키마로 새 데이터 읽기프로듀서
FULL양방향무관
*_TRANSITIVE모든 이전 버전과 대조같음
NONE검사 안 함

보안

Kafka Connect — 15%

REST 핵심 8개

외워 둘 엔드포인트
경로용도
POST /connectors생성
GET /connectors/{n}/status상태 + trace + worker_id
PUT /connectors/{n}/config설정 전체 교체
PATCH /connectors/{n}/config부분 수정
POST /connectors/{n}/restart?includeTasks=true&onlyFailed=true
GET/PATCH/DELETE …/offsets오프셋 조회·변경·초기화 (STOPPED 필요)
PUT /connector-plugins/{t}/config/validate배포 전 검증
PUT /admin/loggers/{name}런타임 로그 레벨 변경

Application Observability — 13%

lag 측정 3가지

방법과 함정
방법함정
kafka-consumer-groups --describe커밋 기준이라 지연. 컨슈머 없으면 CONSUMER-ID-
클라이언트 JMX records-lag-max컨슈머가 죽으면 메트릭이 사라져 0처럼 보임
외부 lag 익스포터운영 부담. 커밋 기준의 지연은 동일

브로커 메트릭 (개발자 관점)

Connect · Streams 관측

Kafka Streams — 12%

조인 4종

윈도우 · co-partitioning
조인윈도우co-partitioning
KStream ⋈ KStream필수필요
KStream ⋈ KTable불필요필요
KStream ⋈ GlobalKTable불필요불필요
KTable ⋈ KTable불필요필요 (FK 조인은 불필요)

윈도우 4종

경계와 성질
윈도우성질
Tumbling고정 크기, 겹치지 않음. 레코드당 1개
Hopping고정 크기 + advance로 겹침. 레코드당 size÷advance 개
Sliding레코드 기준 고정 간격. 데이터 있는 구간만
Session비활성 gap으로 구분, 크기 가변, 병합 가능

Application Testing — 8%

도구 · 브로커 필요 여부 · 용도
도구브로커용도
TopologyTestDriver불필요Streams 토폴로지 단위 테스트
MockProducer불필요history()로 전송 레코드 검사
MockConsumer불필요addRecord()로 레코드 주입
Testcontainers필요실제 브로커 통합 테스트
EmbeddedKafkaCluster필요(JVM)Docker 없는 통합 테스트. Apache 공개 배포 아티팩트가 아닙니다 (streams/integration-tests 내부 유틸) — “Apache 제공 도구”로 분류하면 틀립니다
@EmbeddedKafka필요(JVM)Spring 통합 테스트
kafka-producer-perf-test.sh필요쓰기 처리량·지연
kafka-consumer-perf-test.sh필요읽기 처리량
kafka-e2e-latency.sh필요end-to-end 지연
kafka-verifiable-producer/consumer.sh필요유실·중복 정합성 검증

API · 워크플로 호출 순서

list order 유형 대비. 소리 내어 순서를 읊어 보세요.

트랜잭션 (consume-transform-produce)
1. initTransactions()          ← 애플리케이션 시작 시 1회만
2. beginTransaction()
3. send(...)                    ← 결과 레코드
4. sendOffsetsToTransaction(...) ← 읽은 오프셋을 같은 트랜잭션에
5. commitTransaction()
   실패 시 abortTransaction()
   ProducerFenced / OutOfOrderSequence / Authorization → close() 후 종료
파티션 재할당
1. --generate   (계획 JSON 생성)
2. --execute    (--throttle 로 대역폭 제한)
3. --verify     ← 반드시 실행. 스로틀이 여기서 해제됨
   진행 중 취소는 --cancel
   ※ 파티션 수는 바꿀 수 없음 (레플리카 배치만 이동)
KRaft 부트스트랩
1. kafka-storage.sh random-uuid          (클러스터 UUID 생성)
2. kafka-storage.sh format -t {UUID} -c server.properties
3. kafka-server-start.sh server.properties
4. kafka-topics.sh --create --bootstrap-server localhost:9092
   ※ --zookeeper 는 3.0 제거(KIP-604). kafka-configs.sh 만 3.9까지 남았고 4.x 엔 없음
큰 메시지 허용
1. 토픽    max.message.bytes
2. 프로듀서 max.request.size
3. 컨슈머  max.partition.fetch.bytes
4. 브로커  replica.fetch.max.bytes   ← 하드 상한 아님. 빼먹으면 복제 처리량만 급감
스키마 진화 배포 (BACKWARD)
1. 새 스키마를 등록해 호환성 검사 통과 확인
2. 컨슈머 배포        ← BACKWARD 는 컨슈머 먼저
3. 프로듀서 배포
   ※ FORWARD 는 2와 3의 순서가 반대
Connect 실패 조사
1. GET /connectors/{name}/status        → 실패 태스크와 trace, worker_id
2. 그 worker_id 노드의 로그 파일 확인   ← 리더 워커가 아님
3. PUT /admin/loggers/{logger}          → 필요하면 런타임 로그 레벨 상향
4. 원인 수정 (컨버터·권한·스키마 등)
5. POST /connectors/{name}/restart?includeTasks=true&onlyFailed=true
6. 로그 레벨을 원래대로 되돌림
Streams 상태 초기화
1. 애플리케이션 정지 (모든 인스턴스)
2. kafka-streams-application-reset.sh --application-id {id}
3. 각 인스턴스에서 KafkaStreams.cleanUp() 또는 state.dir 삭제
4. 재기동
업그레이드 경로
2.x → 3.9 (마지막 ZooKeeper 지원 버전) → KRaft 마이그레이션 → 4.x
※ 4.3 업그레이드는 KRaft 필수, 소프트웨어·메타데이터 최소 3.3.x

예외 클래스와 원인

matching 유형 대비 — 재시도 가능 여부 포함
예외원인재시도
RecordTooLargeException레코드가 크기 상한 초과불가
SerializationException직렬화·역직렬화 실패 (스키마 불일치 포함)불가
AuthorizationException ·
TopicAuthorizationException
ACL 부족 (인증이 아니라 인가)불가
InvalidTopicException토픽 이름이 규칙 위반불가
ConfigException설정 조합 위반 (예: 멱등성 + in-flight>5)기동 실패
IllegalStateExceptionassign()subscribe() 혼용코드 오류
NotEnoughReplicasExceptionISR < min.insync.replicas가능
LeaderNotAvailableException ·
NotLeaderOrFollowerException
리더 이동·선출 중가능
NetworkException일시적 네트워크 오류가능
TimeoutException버퍼·메타데이터·요청 대기 초과가능
CoordinatorNotAvailableException그룹·트랜잭션 코디네이터 부재가능
NoOffsetForPartitionExceptionauto.offset.reset=none인데 커밋 오프셋 없음설정 문제
ProducerFencedException같은 transactional.id의 새 세션이 등장종료 필요
OutOfOrderSequenceException멱등성 시퀀스 불일치종료 필요
TopologyExceptionStreams 조인 양쪽 파티션 수 불일치토폴로지 수정
DataExceptionConnect 컨버터 변환 실패DLQ 대상

버전 사실 10개

Apache Kafka 4.3 기준
사실버전
acks 1 → all3.0
enable.idempotence false → true3.0
KRaft production-ready3.3
Tiered Storage EA3.6
마지막 ZooKeeper 지원 버전3.9
ZooKeeper 제거 · Java 8 제거 (--zookeeper CLI 옵션은 3.0)4.0
KIP-848 GA (기본값은 여전히 classic)4.0
linger.ms 0 → 54.0
Streams Rebalance Protocol Early Access4.1
Share Groups (KIP-932) production-ready4.2

시험장 들어가기 전 마지막 확인

  1. 문항 유형 3종 — multiple-choice · matching · list order. 객관식만이 아닙니다
  2. linger.ms=5, group.protocol=classic — 시중 자료가 가장 많이 틀리는 두 개
  3. in-flight ≤ 5, 초과하면 기동 실패
  4. 하트비트 축과 poll 축은 별개. 처리 지연이면 max.poll.records
  5. isolation.level은 컨슈머 설정, 기본값은 read_uncommitted
  6. EOS는 Kafka 경계 안에서만
  7. lag = high watermark − committed offset
  8. message.max.bytes=1048588, max.request.size=1048576
  9. BACKWARD=컨슈머 먼저, FORWARD=프로듀서 먼저
  10. sink 오프셋은 __consumer_offsets, source는 offset.storage.topic
  11. DLQ는 errors.tolerance=all + 토픽 지정 + sink 전용
  12. map은 리파티션, mapValues는 아님
  13. TopologyTestDriver는 브로커 불필요
  14. 절대적 표현("항상", "모든")이 든 선택지는 대개 오답
  15. 설정을 볼 때 소속을 먼저 확인 — 가장 흔한 함정입니다

브라우저의 인쇄 기능(Ctrl+P 또는 Cmd+P)으로 그대로 출력할 수 있습니다. 인쇄 시 사이드바 · 목차 패널 · 버튼 · 복사 아이콘은 자동으로 숨겨지고, 표와 코드 블록은 페이지 중간에서 잘리지 않도록 처리됩니다. 표가 넓어 잘리는 경우에는 가로 방향(landscape)으로 인쇄하세요.

링크는 인쇄본에서 URL이 함께 표시되므로, 종이에서도 어느 페이지를 참조하는지 알 수 있습니다.

공식 문서 출처

이 페이지의 모든 설정 기본값과 버전 사실은 Apache Kafka 4.3 공식 문서에서 확인했습니다. 도메인 가중치는 공개 자료 기준 잠정치이며 Confluent 공식 Exam Guide로 재확인이 필요합니다 (CCDAK 개요 참조).