이 페이지 쓰는 법

시작 전 — 배포 파일명 읽는 법

내려받기와 압축 해제
curl -O https://archive.apache.org/dist/kafka/4.3.1/kafka_2.13-4.3.1.tgz
tar -xzf kafka_2.13-4.3.1.tgz
cd kafka_2.13-4.3.1

# 이후 이 페이지의 모든 명령은 이 디렉터리에서 bin/ 아래를 호출합니다
bin/kafka-topics.sh --version

목적별 명령 표

$BSlocalhost:9092(브로커), $BClocalhost:9093(컨트롤러)로 읽으세요. 전체 명령은 각 분류 아래의 복붙용 블록에 있습니다.

Apache Kafka 4.3 CLI — 목적 기반 색인 (95항목)
분류 하고 싶은 것 명령 메모
클러스터 준비클러스터 UUID 생성kafka-storage.sh random-uuidKRaft 부트스트랩의 첫 단계
클러스터 준비단일 노드 로그 디렉터리 포맷kafka-storage.sh format --standalone -t $ID -c …--standalone은 1노드 쿼럼
클러스터 준비다중 노드 로그 디렉터리 포맷kafka-storage.sh format -t $ID -c …노드마다 같은 -t 값을 써야 합니다
클러스터 준비포맷 시 초기 SCRAM 사용자 심기kafka-storage.sh format … --add-scram …브로커 간 인증용 자격 증명은 기동 전에 필요
클러스터 준비브로커·컨트롤러 기동kafka-server-start.sh config/server.propertiesprocess.roles가 역할을 결정
클러스터 준비클러스터 ID·노드 확인kafka-cluster.sh cluster-id --bootstrap-server $BS
클러스터 준비죽은 브로커 등록 해제kafka-cluster.sh unregister --bootstrap-server $BS --id 1영구 제거된 노드를 메타데이터에서 지움
메타데이터 · 쿼럼컨트롤러 쿼럼 상태 보기kafka-metadata-quorum.sh --bootstrap-server $BS describe --status리더 ID·epoch·LEO 확인
메타데이터 · 쿼럼쿼럼 복제 진행 보기kafka-metadata-quorum.sh … describe --replication컨트롤러 추가 전 따라잡았는지 확인
메타데이터 · 쿼럼컨트롤러 추가kafka-metadata-quorum.sh … add-controller동적 쿼럼에서만 가능
메타데이터 · 쿼럼컨트롤러 제거kafka-metadata-quorum.sh … remove-controller --controller-id $ID --controller-directory-id $DIR종료 전에 먼저 제거하세요
메타데이터 · 쿼럼클러스터 feature 확인kafka-features.sh --bootstrap-server $BS describemetadata.version 등
메타데이터 · 쿼럼메타데이터 버전 올리기kafka-features.sh … upgrade --release-version 4.3업그레이드의 마지막 단계
메타데이터 · 쿼럼메타데이터 로그 내용 보기kafka-dump-log.sh --cluster-metadata-decoder --files …컨트롤러 이슈 조사용
메타데이터 · 쿼럼메타데이터 스냅샷 탐색kafka-metadata-shell.sh --snapshot …checkpoint대화형 셸
토픽토픽 목록kafka-topics.sh --bootstrap-server $BS --list
토픽토픽 생성kafka-topics.sh … --create --topic T --partitions 6 --replication-factor 3운영 토픽은 반드시 명시 생성
토픽생성 시 토픽 설정 지정kafka-topics.sh … --create … --config retention.ms=86400000--config는 반복 가능
토픽토픽 상세 보기 (리더·ISR)kafka-topics.sh … --describe --topic T장애 조사의 출발점
토픽기본값과 다른 설정을 가진 토픽만kafka-topics.sh … --describe --topics-with-overrides
토픽under-replicated 파티션만kafka-topics.sh … --describe --under-replicated-partitionsURP 알림 대응 1번
토픽min.insync.replicas 미달 파티션만kafka-topics.sh … --describe --under-min-isr-partitions쓰기가 막히는 파티션
토픽ISR이 딱 최소치인 파티션만kafka-topics.sh … --describe --at-min-isr-partitions한 대만 더 잃으면 멈춥니다
토픽리더 없는(offline) 파티션만kafka-topics.sh … --describe --unavailable-partitionsOfflinePartitionsCount와 짝
토픽파티션 수 늘리기kafka-topics.sh … --alter --topic T --partitions 12줄일 수 없습니다. 키 분배가 바뀝니다
토픽토픽 삭제kafka-topics.sh … --delete --topic Tdelete.topic.enabletrue여야 함
토픽내부 토픽 제외하고 목록kafka-topics.sh … --list --exclude-internal__consumer_offsets 등 제외
토픽토픽 ID로 조회kafka-topics.sh … --describe --topic-id $UUID재생성된 동명 토픽 구분에 유용
생산 · 소비콘솔에서 메시지 보내기kafka-console-producer.sh --bootstrap-server $BS --topic T
생산 · 소비키와 함께 보내기kafka-console-producer.sh … --property parse.key=true --property key.separator=:파티셔닝 테스트용
생산 · 소비처음부터 읽기kafka-console-consumer.sh … --topic T --from-beginning
생산 · 소비키·오프셋·파티션까지 출력kafka-console-consumer.sh … --property print.key=true --property print.offset=true
생산 · 소비N건만 읽고 종료kafka-console-consumer.sh … --max-messages 10스크립트에서 유용
생산 · 소비특정 파티션·오프셋부터 읽기kafka-console-consumer.sh … --partition 3 --offset 1000그룹을 쓰지 않는 assign 모드
생산 · 소비커밋된 것만 읽기kafka-console-consumer.sh … --isolation-level read_committed트랜잭션 검증
생산 · 소비Share Group으로 소비 (4.2+)kafka-console-share-consumer.sh --bootstrap-server $BS --topic T레코드 단위 ack · 파티션 배타 할당 없음
컨슈머 그룹 · lag그룹 목록kafka-consumer-groups.sh --bootstrap-server $BS --list
컨슈머 그룹 · laglag 확인kafka-consumer-groups.sh … --describe --group GLAG 열이 목적. 가장 많이 쓰는 명령
컨슈머 그룹 · lag그룹 멤버·할당 파티션 보기kafka-consumer-groups.sh … --describe --group G --members --verbose리밸런스 조사
컨슈머 그룹 · lag그룹 상태만 보기kafka-consumer-groups.sh … --describe --group G --stateStable / PreparingRebalance
컨슈머 그룹 · lag오프셋을 최신으로 리셋kafka-consumer-groups.sh … --reset-offsets --group G --topic T --to-latest --execute그룹이 비어 있어야 합니다
컨슈머 그룹 · lag오프셋을 맨 처음으로 리셋… --reset-offsets … --to-earliest --execute전체 재처리
컨슈머 그룹 · lag특정 시각으로 리셋… --reset-offsets … --to-datetime 2026-07-01T00:00:00.000ISO-8601. 타임존 주의
컨슈머 그룹 · lag상대 이동으로 리셋… --reset-offsets … --shift-by -1000음수는 되돌리기
컨슈머 그룹 · lag기간만큼 되돌리기… --reset-offsets … --by-duration PT1HISO-8601 duration
컨슈머 그룹 · lag절대 오프셋으로 리셋… --reset-offsets … --to-offset 5000
컨슈머 그룹 · lag리셋 결과 미리보기… --reset-offsets … --dry-run--execute 없이 실행하면 dry-run
컨슈머 그룹 · lag모든 토픽 대상 리셋… --reset-offsets --group G --all-topics --to-earliest --execute
컨슈머 그룹 · lag그룹 삭제kafka-consumer-groups.sh … --delete --group G활성 멤버가 없어야 함
컨슈머 그룹 · lag토픽 오프셋만 삭제kafka-consumer-groups.sh … --delete-offsets --group G --topic T그룹은 남기고 오프셋만
컨슈머 그룹 · lag모든 종류의 그룹 목록 (4.2+)kafka-groups.sh --bootstrap-server $BS --listconsumer · share · streams 통합
컨슈머 그룹 · lagShare Group lag (4.2+)kafka-share-groups.sh --bootstrap-server $BS --describe --group G
컨슈머 그룹 · lagShare Group 오프셋 리셋 (4.2+)kafka-share-groups.sh … --reset-offsets --group G --topic T --to-latest --execute
컨슈머 그룹 · lagStreams 그룹 조회kafka-streams-groups.sh --bootstrap-server $BS --listStreams 애플리케이션 전용
컨슈머 그룹 · lagStreams 앱 상태·오프셋 초기화kafka-streams-application-reset.sh --bootstrap-server $BS --application-id A로컬 state.dir도 지워야 완전 초기화
오프셋 조회파티션별 최신 오프셋(LEO)kafka-get-offsets.sh --bootstrap-server $BS --topic T --time latestlag을 손으로 계산할 때
오프셋 조회파티션별 최초 오프셋kafka-get-offsets.sh … --time earliest리텐션 삭제 경계
오프셋 조회특정 시각 기준 오프셋kafka-get-offsets.sh … --time 1767225600000epoch ms
오프셋 조회특정 파티션만kafka-get-offsets.sh … --topic-partitions T:0,T:3
오프셋 조회오프셋 이하 레코드 삭제kafka-delete-records.sh --bootstrap-server $BS --offset-json-file f.json리텐션과 무관하게 즉시 삭제
설정토픽 설정 조회kafka-configs.sh --bootstrap-server $BS --describe --entity-type topics --entity-name T
설정토픽 설정 변경kafka-configs.sh … --alter --entity-type topics --entity-name T --add-config retention.ms=3600000무중단
설정토픽 설정 삭제(기본값 복귀)kafka-configs.sh … --alter --entity-type topics --entity-name T --delete-config retention.ms
설정브로커 동적 설정 조회kafka-configs.sh … --describe --entity-type brokers --entity-name 1
설정브로커 동적 설정 변경kafka-configs.sh … --alter --entity-type brokers --entity-name 1 --add-config num.io.threads=16cluster-wide·per-broker만 가능
설정클러스터 전체 기본값 변경kafka-configs.sh … --alter --entity-type brokers --entity-default --add-config …
설정브로커 로그 레벨 변경kafka-configs.sh … --alter --entity-type broker-loggers --entity-name 1 --add-config kafka.server=DEBUG재시작 없이 즉시 적용
설정클라이언트 쿼터 설정kafka-configs.sh … --alter --entity-type clients --entity-name C --add-config 'producer_byte_rate=1024'사용자·클라이언트 조합도 가능
설정컨트롤러 엔드포인트로 설정 조작kafka-configs.sh --bootstrap-controller $BC …브로커가 전부 죽었을 때 유용
설정클라이언트 메트릭 구독 설정kafka-client-metrics.sh --bootstrap-server $BS --alter --name m --metrics … --interval …KIP-714
복제 · 리더재할당 계획 생성kafka-reassign-partitions.sh … --topics-to-move-json-file t.json --broker-list "5,6" --generate현재/제안 JSON을 함께 출력
복제 · 리더재할당 실행 (대역폭 제한 포함)kafka-reassign-partitions.sh … --reassignment-json-file r.json --execute --throttle 50000000throttle 없이 돌리면 클러스터가 흔들립니다
복제 · 리더재할당 진행 확인kafka-reassign-partitions.sh … --reassignment-json-file r.json --verify완료 후 throttle 설정을 제거합니다
복제 · 리더선호 리더로 되돌리기kafka-leader-election.sh … --election-type preferred --all-topic-partitions재시작 후 리더 편중 해소
복제 · 리더unclean 선거 강제kafka-leader-election.sh … --election-type unclean --topic T --partition 0유실을 감수하는 최후 수단
복제 · 리더로그 디렉터리 사용량 보기kafka-log-dirs.sh --bootstrap-server $BS --describe디스크 풀 조사. JSON 출력
복제 · 리더특정 브로커·토픽만 보기kafka-log-dirs.sh … --describe --broker-list 1,2 --topic-list T
복제 · 리더브로커가 지원하는 API 버전kafka-broker-api-versions.sh --bootstrap-server $BS혼합 버전 클러스터 진단
보안ACL 목록kafka-acls.sh --bootstrap-server $BS --list
보안프로듀서 ACL 한 번에 부여kafka-acls.sh … --add --allow-principal User:Bob --producer --topic TWRITE·DESCRIBE·CREATE를 함께 부여
보안컨슈머 ACL 한 번에 부여kafka-acls.sh … --add --allow-principal User:Bob --consumer --topic T --group G토픽 READ·DESCRIBE + 그룹 READ
보안접두어 기반 ACLkafka-acls.sh … --add … --topic "order-" --resource-pattern-type prefixed토픽이 늘어나도 재부여 불필요
보안SCRAM 사용자 생성kafka-configs.sh … --alter --entity-type users --entity-name alice --add-config 'SCRAM-SHA-256=[password=…]'기동 후 동적 생성
보안위임 토큰 생성kafka-delegation-tokens.sh … --create --max-life-time-period -1 --renewer-principal User:u1SASL 채널에서만 가능
진단세그먼트 파일 내용 보기kafka-dump-log.sh --files 00000000000000000000.log --print-data-log배치·타임스탬프·압축 확인
진단인덱스 정합성 검사kafka-dump-log.sh --files ….index --index-sanity-check
진단__consumer_offsets 해독kafka-dump-log.sh --offsets-decoder --files …커밋 레코드 직접 확인
진단트랜잭션 로그 해독kafka-dump-log.sh --transaction-log-decoder --files …
진단진행 중 트랜잭션 목록kafka-transactions.sh --bootstrap-server $BS list
진단멈춘(hanging) 트랜잭션 찾기kafka-transactions.sh … find-hanging --topic TLSO가 멈춰 read_committed가 막힐 때
진단트랜잭션 강제 중단kafka-transactions.sh … abort --topic T --partition 0 --start-offset N최후 수단
진단프로듀서 상태 보기kafka-transactions.sh … describe-producers --topic T --partition 0PID·시퀀스·epoch
성능 측정프로듀서 처리량 측정kafka-producer-perf-test.sh --bootstrap-server $BS --topic T --num-records 100000 --record-size 1024 --throughput -1설정 변경 전후 비교의 기준
성능 측정컨슈머 처리량 측정kafka-consumer-perf-test.sh --bootstrap-server $BS --topic T --num-records 100000--messages는 deprecated
성능 측정Share Consumer 처리량 측정kafka-share-consumer-perf-test.sh --bootstrap-server $BS --topic T --num-records 1000004.2+. --messages는 deprecated

자주 쓰는 원라이너 20개

장애 대응 중 그대로 붙여 쓸 수 있는 형태입니다. BS=localhost:9092를 먼저 export해 두면 편합니다.

1~5 · 상태 파악
export BS=localhost:9092

# 1. 지금 문제가 있는 파티션이 있는가 (URP)
bin/kafka-topics.sh --bootstrap-server $BS --describe --under-replicated-partitions

# 2. 쓰기가 막힌 파티션이 있는가 (ISR < min.insync.replicas)
bin/kafka-topics.sh --bootstrap-server $BS --describe --under-min-isr-partitions

# 3. 리더가 아예 없는 파티션이 있는가 (offline)
bin/kafka-topics.sh --bootstrap-server $BS --describe --unavailable-partitions

# 4. 컨트롤러 쿼럼은 살아 있는가
bin/kafka-metadata-quorum.sh --bootstrap-server $BS describe --status

# 5. 브로커별 디스크 사용량 (JSON)
bin/kafka-log-dirs.sh --bootstrap-server $BS --describe
6~10 · 컨슈머 lag
# 6. 특정 그룹의 lag
bin/kafka-consumer-groups.sh --bootstrap-server $BS --describe --group my-group

# 7. lag이 큰 파티션만 정렬해서 보기 (LAG 열이 5번째)
bin/kafka-consumer-groups.sh --bootstrap-server $BS --describe --group my-group \
  | awk 'NR>1 && $6 != "-" { print $6, $1, $2, $3 }' | sort -rn | head -20

# 8. 전체 그룹의 lag 합계를 그룹별로
for g in $(bin/kafka-consumer-groups.sh --bootstrap-server $BS --list); do
  total=$(bin/kafka-consumer-groups.sh --bootstrap-server $BS --describe --group "$g" \
    | awk 'NR>1 && $6 ~ /^[0-9]+$/ { s += $6 } END { print s+0 }')
  echo "$total $g"
done | sort -rn

# 9. 누가 어느 파티션을 들고 있는가 (리밸런스 조사)
bin/kafka-consumer-groups.sh --bootstrap-server $BS --describe --group my-group --members --verbose

# 10. 그룹 상태만 (Stable / PreparingRebalance / CompletingRebalance / Empty)
bin/kafka-consumer-groups.sh --bootstrap-server $BS --describe --group my-group --state
11~15 · 오프셋 조작
# 11. 리셋을 먼저 미리보기 (--execute 를 빼면 dry-run)
bin/kafka-consumer-groups.sh --bootstrap-server $BS --reset-offsets \
  --group my-group --topic orders --to-latest

# 12. 최신으로 리셋 — lag을 즉시 0으로 (미처리 데이터를 버립니다)
bin/kafka-consumer-groups.sh --bootstrap-server $BS --reset-offsets \
  --group my-group --topic orders --to-latest --execute

# 13. 1시간 전으로 되돌려 재처리
bin/kafka-consumer-groups.sh --bootstrap-server $BS --reset-offsets \
  --group my-group --all-topics --by-duration PT1H --execute

# 14. 파티션별 최신 오프셋(LEO)과 최초 오프셋
bin/kafka-get-offsets.sh --bootstrap-server $BS --topic orders --time latest
bin/kafka-get-offsets.sh --bootstrap-server $BS --topic orders --time earliest

# 15. 특정 시각(epoch ms) 기준 오프셋 — 재처리 시작점 찾기
bin/kafka-get-offsets.sh --bootstrap-server $BS --topic orders --time 1767225600000
16~20 · 즉시 조치
# 16. 리텐션을 1시간으로 줄여 디스크 확보 (원래 값은 반드시 기록해 두세요)
bin/kafka-configs.sh --bootstrap-server $BS --alter \
  --entity-type topics --entity-name bloated-topic --add-config retention.ms=3600000

# 17. 되돌리기 — 토픽 오버라이드 제거
bin/kafka-configs.sh --bootstrap-server $BS --alter \
  --entity-type topics --entity-name bloated-topic --delete-config retention.ms

# 18. 리더 편중 해소 (재시작 직후에 자주 필요)
bin/kafka-leader-election.sh --bootstrap-server $BS \
  --election-type preferred --all-topic-partitions

# 19. 특정 클래스만 DEBUG로 (재시작 없이, 브로커 1번)
bin/kafka-configs.sh --bootstrap-server $BS --alter \
  --entity-type broker-loggers --entity-name 1 \
  --add-config org.apache.kafka.clients.consumer=DEBUG

# 20. read_committed가 멈췄을 때 — 멈춘 트랜잭션 찾기
bin/kafka-transactions.sh --bootstrap-server $BS find-hanging --topic orders

--bootstrap-server vs --bootstrap-controller

KRaft에서는 엔드포인트가 두 종류입니다. 대부분의 명령은 브로커로 보내면 되고, 브로커가 전부 죽었거나 컨트롤러 자체를 다뤄야 할 때 컨트롤러 엔드포인트를 씁니다. 두 옵션을 동시에 쓸 수는 없습니다.

엔드포인트 선택 기준
옵션대상언제 쓰는가
--bootstrap-server 브로커 리스너 (보통 9092) 기본. 토픽·그룹·설정·ACL 등 거의 모든 작업
--bootstrap-controller 컨트롤러 리스너 (보통 9093) 컨트롤러 추가·제거, feature 조작, 브로커가 모두 다운된 상태에서의 설정 조회
--command-config Admin 클라이언트 프로퍼티 파일 SASL·SSL이 켜진 클러스터에서는 거의 항상 필요합니다
client.properties — 보안이 켜진 클러스터에서 CLI를 쓸 때
# SASL_SSL + SCRAM-SHA-512 예시
security.protocol=SASL_SSL
sasl.mechanism=SCRAM-SHA-512
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required \
  username="admin" \
  password="admin-secret";
ssl.truststore.location=/var/private/ssl/client.truststore.jks
ssl.truststore.password=changeit
사용
bin/kafka-topics.sh --bootstrap-server broker1:9093 \
  --command-config client.properties --list

인증 실패 시 로그를 읽는 방법과 리스너 조합 패턴은 보안 치트시트에 정리했습니다.

KRaft 클러스터 부트스트랩 전체 순서

단일 노드 (개발용) — 공식 quickstart 기준
# 1. 클러스터 UUID 생성 (한 번만)
KAFKA_CLUSTER_ID="$(bin/kafka-storage.sh random-uuid)"
echo "$KAFKA_CLUSTER_ID"

# 2. 로그 디렉터리 포맷 — KRaft에서 반드시 필요한 단계
bin/kafka-storage.sh format --standalone -t "$KAFKA_CLUSTER_ID" -c config/server.properties

# 3. 기동
bin/kafka-server-start.sh config/server.properties

# 4. 확인
bin/kafka-metadata-quorum.sh --bootstrap-server localhost:9092 describe --status
다중 노드 — 노드마다 실행 (같은 -t 값 사용)
# 모든 노드가 동일한 클러스터 ID로 포맷되어야 합니다.
# ID가 다르면 INCONSISTENT_CLUSTER_ID 로 조인이 거부됩니다.
bin/kafka-storage.sh format -t "$KAFKA_CLUSTER_ID" -c config/server.properties

# SASL/SCRAM 을 쓸 경우 브로커 간 인증 자격 증명을 포맷 시점에 심습니다
bin/kafka-storage.sh format -t "$KAFKA_CLUSTER_ID" -c config/server.properties \
  --add-scram 'SCRAM-SHA-256=[name="admin",password="admin-secret"]'
컨트롤러 추가 · 제거 (동적 쿼럼)
# 1) 새 컨트롤러를 포맷·기동한 뒤 복제가 따라잡았는지 확인
bin/kafka-metadata-quorum.sh --bootstrap-server localhost:9092 describe --replication

# 2) 쿼럼에 추가 (컨트롤러 자신의 설정 파일을 --command-config 로 넘깁니다)
bin/kafka-metadata-quorum.sh --command-config config/controller.properties \
  --bootstrap-server localhost:9092 add-controller

# 3) 제거는 종료 "전에" — 순서를 바꾸면 쿼럼이 흔들립니다
bin/kafka-metadata-quorum.sh --bootstrap-server localhost:9092 \
  remove-controller --controller-id 3 --controller-directory-id <directory-id>

파티션 재할당 3단계

1단계 — 옮길 토픽 목록 JSON
{
  "topics": [
    { "topic": "orders" },
    { "topic": "payments" }
  ],
  "version": 1
}
2단계 — 계획 생성 · 실행 · 검증
# 계획 생성: 현재 배치와 제안 배치를 함께 출력합니다.
# "Current partition replica assignment" 출력은 롤백용으로 반드시 파일로 저장하세요.
bin/kafka-reassign-partitions.sh --bootstrap-server $BS \
  --topics-to-move-json-file topics-to-move.json \
  --broker-list "1,2,3,4,5,6" --generate

# 실행: throttle 없이 돌리면 복제 트래픽이 클러스터를 잡아먹습니다 (bytes/sec)
bin/kafka-reassign-partitions.sh --bootstrap-server $BS \
  --reassignment-json-file reassignment.json --execute --throttle 50000000

# 검증: 완료되면 throttle 설정이 자동으로 제거됩니다.
# --verify 를 돌리지 않으면 throttle 이 남아 복제가 계속 느립니다.
bin/kafka-reassign-partitions.sh --bootstrap-server $BS \
  --reassignment-json-file reassignment.json --verify

kafka-reassign-partitions.sh 옵션 전체

옵션은 4.3 소스의 ReassignPartitionsCommandOptions.java에서 확인했습니다.

kafka-reassign-partitions.sh 옵션 (18개)
옵션용도
--generate재할당 계획 생성. 현재 배치와 제안 배치를 함께 출력합니다
--execute계획 실행
--verify진행 상황 확인. 완료 시 throttle 설정을 제거합니다
--cancel진행 중인 재할당 취소. 클러스터가 흔들릴 때의 탈출구입니다
--list진행 중인 재할당 목록 조회
--additional기존 재할당에 덧붙여 실행 (취소하지 않고 추가)
--preserve-throttles--verify 시 throttle 설정을 제거하지 않고 유지합니다. 여러 단계로 나눠 진행할 때
--throttle복제 대역폭 상한 (bytes/sec). 지정하지 않으면 클러스터가 복제 트래픽에 잠깁니다
--replica-alter-log-dirs-throttle브로커 내부 로그 디렉터리 간 이동 대역폭 상한
--reassignment-json-file재할당 계획 JSON 파일 (--execute·--verify·--cancel)
--topics-to-move-json-file옮길 토픽 목록 JSON (--generate)
--broker-list대상 브로커 ID 목록 (--generate)
--disable-rack-aware랙 인식 배치를 끕니다
--disallow-replication-factor-change복제 계수 변경을 금지합니다 (의도치 않은 RF 변경 방지)
--timeout명령 타임아웃
--bootstrap-server브로커 엔드포인트
--bootstrap-controller컨트롤러 엔드포인트
--command-configAdmin 클라이언트 프로퍼티 파일
RF를 3으로 올리는 계획 JSON — replicas 배열에 브로커를 추가합니다
{
  "version": 1,
  "partitions": [
    { "topic": "orders", "partition": 0, "replicas": [1, 2, 3] },
    { "topic": "orders", "partition": 1, "replicas": [2, 3, 1] },
    { "topic": "orders", "partition": 2, "replicas": [3, 1, 2] }
  ]
}
재할당이 클러스터를 흔들 때 — 취소와 조회
# 진행 중인 재할당 목록
bin/kafka-reassign-partitions.sh --bootstrap-server $BS --list

# 취소 — 계획 파일이 필요합니다
bin/kafka-reassign-partitions.sh --bootstrap-server $BS \
  --reassignment-json-file reassignment.json --cancel

# 여러 단계로 나눠 진행할 때는 throttle 을 유지합니다
bin/kafka-reassign-partitions.sh --bootstrap-server $BS \
  --reassignment-json-file reassignment.json --verify --preserve-throttles

성능 측정 도구 — 4.3에서 옵션이 바뀌었습니다

perf 도구 옵션 변경 — 4.3 소스(ProducerPerformance.java · ConsumerPerformance.java)의 deprecation 경고 메시지로 확인
도구 구 옵션 (deprecated) 4.3 신규 용도
kafka-producer-perf-test.sh --producer-props --command-property 프로듀서 설정을 인라인으로. 키마다 옵션을 반복합니다
kafka-producer-perf-test.sh --producer.config --command-config 프로퍼티 파일로 설정 전달
kafka-consumer-perf-test.sh --messages --num-records 소비할 레코드 수. 프로듀서 쪽 이름과 통일되었습니다
kafka-consumer-perf-test.sh --consumer.config --command-config 프로퍼티 파일로 설정 전달
kafka-share-consumer-perf-test.sh --messages · --consumer.config --num-records · --command-config Share Consumer도 같은 규칙을 따릅니다 (4.2+)
4.3에서 추가된 옵션
옵션도구용도
--bootstrap-serverproducer-perf-test다른 CLI와 동일하게 브로커를 직접 지정합니다. 예전에는 --producer-props bootstrap.servers=…로 넘겨야 했습니다
--reporting-intervalproducer · consumer · share-consumer중간 통계 출력 주기(ms)
--includeconsumer-perf-test소비할 토픽을 정규식으로 지정
--command-propertyproducer · consumer · share-consumer인라인 설정. 세 도구 모두 지원합니다
--warmup-recordsproducer-perf-test통계에서 제외할 워밍업 레코드 수. JIT 워밍업 때문에 초반 수치가 왜곡되는 문제를 없앱니다

구 옵션. 아직 동작하지만 실행 시 deprecation 경고가 출력되고 향후 제거됩니다.

3.x 스타일
bin/kafka-producer-perf-test.sh \
  --topic perf-test \
  --num-records 500000 --record-size 1024 --throughput -1 \
  --producer-props bootstrap.servers=localhost:9092 \
    compression.type=lz4 linger.ms=5

bin/kafka-consumer-perf-test.sh \
  --bootstrap-server localhost:9092 \
  --topic perf-test --messages 500000

4.3 스타일. 다른 CLI와 옵션 이름이 통일됩니다.

4.3 스타일
bin/kafka-producer-perf-test.sh \
  --bootstrap-server localhost:9092 \
  --topic perf-test \
  --num-records 500000 --record-size 1024 --throughput -1 \
  --warmup-records 10000 \
  --command-property compression.type=lz4 \
  --command-property linger.ms=5

bin/kafka-consumer-perf-test.sh \
  --bootstrap-server localhost:9092 \
  --topic perf-test --num-records 500000

Share Groups (4.2+)

ack 타입 4종 — AcknowledgeType.java 확인 (괄호는 프로토콜 값)
타입의미전달 시도 카운트
ACCEPT (1) 정상 처리 완료. 레코드가 확정됩니다 더 이상 전달되지 않습니다
RELEASE (2) 처리하지 못했으니 다시 전달해 달라는 뜻 증가합니다. group.share.delivery.count.limit(기본 5)에 도달하면 아카이브됩니다
REJECT (3) 이 레코드는 처리할 수 없다는 뜻. 재전달하지 않습니다 재전달 없음 — 포이즌 메시지 처리에 씁니다
RENEW (4) 처리 중이니 잠금을 연장해 달라는 뜻 증가하지 않습니다. 처리 시간이 group.share.record.lock.duration.ms보다 긴 경우
Share Group 그룹 설정 — kafka-configs.sh로 그룹별 오버라이드 가능
설정기본값역할
share.record.lock.duration.ms30000획득한 레코드의 잠금 유지 시간. 초과하면 다른 컨슈머에게 재배달됩니다
share.delivery.count.limit5한 레코드의 최대 전달 시도 횟수. 초과 시 아카이브 — DLQ 대체 설계의 핵심 값
share.partition.max.record.locks2000파티션당 동시 잠금 가능한 레코드 수
share.session.timeout.ms45000Share Group 멤버의 세션 타임아웃
share.heartbeat.interval.ms5000하트비트 간격
share.auto.offset.resetlatestshare group의 시작 위치
share.isolation.levelread_uncommitted트랜잭션 레코드 가시성
share.renew.acknowledge.enabletrueRENEW ack(잠금 연장)을 허용할지
share.assignment.interval.ms1000브로커가 할당을 재계산하는 주기
Share Group 운영
# 목록·상세·상태
bin/kafka-share-groups.sh --bootstrap-server $BS --list
bin/kafka-share-groups.sh --bootstrap-server $BS --describe --group my-share-group
bin/kafka-share-groups.sh --bootstrap-server $BS --describe --group my-share-group --members
bin/kafka-share-groups.sh --bootstrap-server $BS --describe --group my-share-group --state

# 콘솔로 소비해 보기
bin/kafka-console-share-consumer.sh --bootstrap-server $BS --topic orders

# 그룹 설정을 그룹 단위로 오버라이드 (GROUP 리소스 타입)
bin/kafka-configs.sh --bootstrap-server $BS --alter \
  --entity-type groups --entity-name my-share-group \
  --add-config share.delivery.count.limit=3

# 오프셋 리셋
bin/kafka-share-groups.sh --bootstrap-server $BS --reset-offsets \
  --group my-share-group --topic orders --to-latest --execute

도구 색인

도구 이름을 이미 아는 경우 여기서 시작하세요.

Apache Kafka 4.3.1 bin/ 주요 도구 (31개)
도구한 줄 용도비고
kafka-storage.sh클러스터 UUID 생성, 로그 디렉터리 포맷, 초기 SCRAM 자격 증명KRaft 필수. 기동 전 단계
kafka-server-start.sh브로커·컨트롤러 프로세스 기동process.roles가 역할 결정
kafka-metadata-quorum.sh컨트롤러 쿼럼 조회, 컨트롤러 추가·제거KRaft 운영의 중심 도구
kafka-metadata-shell.sh메타데이터 스냅샷을 파일시스템처럼 탐색대화형
kafka-features.sh클러스터 feature(metadata.version 등) 조회·업그레이드버전 업그레이드 마지막 단계
kafka-cluster.sh클러스터 ID 조회, 죽은 브로커 등록 해제
kafka-topics.sh토픽 생성·조회·변경·삭제, URP/ISR 필터 조회가장 자주 쓰는 도구
kafka-configs.sh토픽·브로커·사용자·클라이언트·그룹 설정 조회·변경, 쿼터, SCRAM동적 설정의 유일한 창구
kafka-console-producer.sh표준 입력으로 메시지 발행--property로 키 파싱
kafka-console-consumer.sh토픽 내용을 표준 출력으로--from-beginning·--max-messages
kafka-console-share-consumer.shShare Group으로 소비4.2+ (KIP-932)
kafka-consumer-groups.sh그룹 조회, lag 확인, 오프셋 리셋·삭제장애 대응 필수
kafka-share-groups.shShare Group 조회·오프셋 리셋·삭제4.2+
kafka-streams-groups.shKafka Streams 그룹 조회
kafka-groups.sh모든 종류의 그룹을 통합 조회consumer · share · streams
kafka-streams-application-reset.shStreams 앱의 오프셋·내부 토픽 초기화로컬 state.dir은 직접 삭제
kafka-get-offsets.sh파티션별 최초·최신·시각 기준 오프셋 조회lag 수동 계산
kafka-delete-records.sh지정 오프셋 이하 레코드 삭제되돌릴 수 없습니다
kafka-reassign-partitions.sh파티션 재배치 계획 생성·실행·검증, 복제 대역폭 제한3단계를 모두 실행하세요
kafka-leader-election.shpreferred / unclean 리더 선거 실행unclean은 유실을 감수
kafka-log-dirs.sh브로커별 로그 디렉터리 크기·오프셋 조회디스크 풀 조사
kafka-acls.shACL 추가·제거·조회--producer·--consumer 편의 옵션
kafka-delegation-tokens.sh위임 토큰 생성·갱신·만료·조회SASL 채널 전용
kafka-dump-log.sh로그·인덱스·메타데이터·오프셋·트랜잭션 로그 해독최후의 진단 도구
kafka-transactions.sh트랜잭션 조회, hanging 탐지, 강제 중단find-hanging이 실무 핵심
kafka-client-metrics.sh클라이언트 메트릭 구독 설정KIP-714
kafka-broker-api-versions.sh브로커가 지원하는 API 버전 조회혼합 버전 진단
kafka-producer-perf-test.sh프로듀서 처리량·지연 측정튜닝 전후 비교
kafka-consumer-perf-test.sh컨슈머 처리량 측정
connect-distributed.shConnect 워커를 분산 모드로 기동Connect 치트시트
connect-standalone.shConnect 워커를 standalone 모드로 기동개발·단일 노드 전용

자주 걸리는 지점

공식 문서 출처

이 페이지의 모든 명령·옵션은 Apache Kafka 4.3.1 공식 문서와 배포판의 bin/ 스크립트에서 확인했습니다.