명령줄을 사용하여 Kafka 토픽 생성 및 관리하는 방법

kafka-topics.sh를 사용하여 Kafka 토픽을 생성, 목록 조회, 설명, 변경 및 삭제하는 방법을 알아보세요.

명령줄을 사용하여 Kafka 토픽 생성 및 관리하는 방법

Apache Kafka 토픽은 프로듀서가 레코드를 쓰고 컨슈머가 읽는 곳입니다. 터미널에서 토픽을 생성, 검사, 크기 조정 또는 삭제해야 하는 경우 주요 도구는 kafka-topics.sh입니다.

그래픽 도구도 유용하지만, CLI 명령은 장애나 배포 중에 클러스터가 무엇을 하고 있는지 확인하는 가장 빠른 방법입니다. 이 가이드는 가장 자주 사용하는 토픽 명령을 보여주고 Kafka가 예상치 못한 동작을 할 수 있는 부분을 강조합니다.

전제 조건 및 설정

이 가이드의 명령을 실행하려면 Kafka 바이너리가 설치된 머신에 액세스할 수 있어야 합니다. 모든 토픽 관리 작업은 일반적으로 Kafka 설치의 bin 디렉토리에 있는 kafka-topics.sh 유틸리티를 사용하여 수행됩니다.

모든 명령은 --bootstrap-server로 지정된 최소 하나의 Kafka 브로커 주소가 필요합니다. 이전 Kafka 클러스터는 여전히 --zookeeper를 사용하는 예제를 보여줄 수 있지만, 브로커 기반 관리는 현재 패턴입니다.

아래 예제에서는 브로커가 로컬에서 기본 포트로 실행 중이라고 가정합니다:

# 표준 브로커 주소 자리 표시자
BROKER_ADDRESS="localhost:9092"

1. 새 Kafka 토픽 생성

토픽을 생성하려면 이름과 함께 동작 및 내결함성을 결정하는 두 가지 중요한 매개변수(파티션 수와 복제 계수)를 정의해야 합니다.

필수 매개변수

  • --topic <name>: 토픽의 이름입니다.
  • --partitions <N>: 토픽이 분할될 파티션 수입니다. 파티션은 토픽 내 병렬 처리 및 순서의 단위입니다.
  • --replication-factor <N>: 여러 브로커에 걸쳐 유지될 데이터 복사본 수입니다. 복제 계수가 1이면 중복이 없음을 의미합니다.

명령 예제: sales-data 생성

이 명령은 3개의 파티션과 복제 계수 2(클러스터 전체에 각 파티션의 복사본 2개가 존재함을 의미)로 sales-data라는 토픽을 생성합니다.

kafka-topics.sh --create --topic sales-data \
  --bootstrap-server $BROKER_ADDRESS \
  --partitions 3 \
  --replication-factor 2

팁: 프로덕션에서는 복제 계수 3이 일반적입니다. 이는 각 파티션의 여러 복사본을 다른 브로커에 유지하기 때문입니다. 실제 내결함성은 브로커 배치, min.insync.replicas 및 프로듀서 확인 설정에도 따라 달라집니다.

2. 모든 토픽 목록 조회

Kafka 클러스터에서 현재 사용 가능한 모든 토픽을 보려면 --list 플래그를 사용하세요.

명령 예제

kafka-topics.sh --list --bootstrap-server $BROKER_ADDRESS

출력 예제:

sales-data
logistics-stream
__consumer_offsets

3. 토픽 구성 설명

특정 토픽의 기존 구성, 파티션 수 및 브로커 할당을 확인하는 것은 문제 해결 및 확인에 필수적입니다. --describe 플래그를 사용하세요.

명령 예제: sales-data 설명

kafka-topics.sh --describe --topic sales-data \
  --bootstrap-server $BROKER_ADDRESS

출력 해석:

출력은 토픽 수준과 파티션 수준의 구성을 보여줍니다:

Topic: sales-data  PartitionCount: 3 ReplicationFactor: 2 Configs:
  Topic: sales-data  Partition: 0 Leader: 1 Replicas: 1,2 Isr: 1,2
  Topic: sales-data  Partition: 1 Leader: 2 Replicas: 2,0 Isr: 2,0
  Topic: sales-data  Partition: 2 Leader: 0 Replicas: 0,1 Isr: 0,1
  • Leader: 해당 파티션의 읽기/쓰기를 처리하는 브로커입니다.
  • Replicas: 해당 파티션의 복사본을 보유한 브로커 목록입니다.
  • Isr (In-Sync Replicas): 안전한 장애 조치를 위해 충분히 따라잡은 복제본입니다. ISR이 줄어들면 브로커 상태, 디스크 지연 시간 및 네트워크 지연을 확인하세요.

4. 기존 토픽 변경

Kafka는 생성 후 토픽을 변경할 수 있는 제한된 메커니즘을 제공합니다. 가장 일반적인 두 가지 변경 작업은 파티션 수 증가와 기본 브로커 구성 설정 재정의입니다.

A. 파티션 증가

파티션은 증가만 가능하며 감소는 불가능합니다. 파티션을 늘리면 컨슈머 병렬 처리를 확장하는 데 도움이 됩니다.

경고: 파티션을 늘리면 메시지가 파티션에 매핑(해싱)되는 방식이 변경됩니다. 프로듀서가 키 기반 순서 보장에 의존하는 경우 파티션을 늘리면 기존 키에 대한 순서 전달이 중단될 수 있습니다.

sales-data에 현재 3개의 파티션이 있는 경우 5개로 늘릴 수 있습니다:

kafka-topics.sh --alter --topic sales-data \
  --bootstrap-server $BROKER_ADDRESS \
  --partitions 5

B. 토픽별 구성 변경

kafka-topics.sh --alter --config를 통해 토픽 구성을 변경하는 이전 예제를 볼 수 있습니다. 현재 Kafka 클러스터에서는 동적 구성을 위한 전용 관리 도구이므로 토픽 구성 변경에는 kafka-configs.sh를 선호합니다.

예제: sales-data에 대해 메시지 보존 시간을 24시간(86400000밀리초)으로 설정합니다.

kafka-configs.sh --bootstrap-server $BROKER_ADDRESS \
  --alter --entity-type topics --entity-name sales-data \
  --add-config retention.ms=86400000

특정 구성 재정의를 제거하고 브로커 기본값으로 되돌리려면 --delete-config를 사용하세요:

kafka-configs.sh --bootstrap-server $BROKER_ADDRESS \
  --alter --entity-type topics --entity-name sales-data \
  --delete-config retention.ms

5. Kafka 토픽 삭제

더 이상 사용하지 않는 토픽은 디스크 공간을 확보하고 클러스터 위생을 유지하기 위해 적절히 삭제해야 합니다.

토픽 삭제 활성화

Kafka 브로커는 이 명령이 데이터를 제거하기 전에 삭제를 허용해야 합니다. 많은 최신 배포에서 활성화되어 있지만 가정하지 마십시오. 브로커 구성에서 다음을 확인하세요:

delete.topic.enable=true

명령 예제: old-stream 삭제

--delete 플래그를 사용하여 토픽 제거를 시작합니다. 토픽 삭제는 종종 비동기적이므로 명령이 요청을 제출하고 삭제가 백그라운드에서 발생합니다.

kafka-topics.sh --delete --topic old-stream \
  --bootstrap-server $BROKER_ADDRESS

확인 출력:

Deletion of topic old-stream initiated successfully.

토픽 관리 명령 요약

작업 플래그 목적 예제 매개변수
생성 --create 새 토픽을 초기화합니다. --partitions 5 --replication-factor 3
목록 조회 --list 클러스터의 모든 토픽을 표시합니다. 해당 없음
설명 --describe 현재 구성 및 레이아웃을 봅니다. --topic my-topic
변경 (파티션) --alter 파티션 수를 늘립니다. --partitions N (N > 현재 수)
변경 (구성) kafka-configs.sh --alter 특정 토픽에 대한 브로커 기본값을 재정의합니다. --add-config retention.ms=...
삭제 --delete 토픽을 영구적으로 제거합니다. --topic my-topic

다음 단계

  1. 개발 또는 스테이징 환경에서 이러한 명령을 연습하세요.
  2. 구성 변경 전후에 kafka-configs.sh --describe를 사용하여 어떤 값이 토픽 재정의인지 확인하세요.
  3. 프로듀서 및 컨슈머 테스트를 위한 해당 CLI 명령(kafka-console-producer.shkafka-console-consumer.sh)을 학습하세요.