Apache Kafka KRaft 로컬 설치

Apache Kafka에 대한 학습을 위해 도커 컴포즈로 카프카에 대한 환경을 구성할 때 대부분 wurstmeister/kafka-docker 또는 confluentinc/cp-kafka 사용하여 ZooKeeper 기반의 카프카를 실행하는 방법에 대해 설명하는 것을 볼 수 있다. 본 글에서는 컨플루언트에서 제공하는 confluentinc/confluent-local를 사용해 KRaft 모드의 Apache Kafka에 대한 학습 환경을 만드는 것을 공유하고자 한다.

도커 컴포즈 문서 작성

compose.yaml
version: '3' services: kafka: image: confluentinc/confluent-local:7.5.6 hostname: kafka container_name: kafka ports: - "9092:9092" - "8082:8082" environment: CLUSTER_ID: "EaJs_OcfTB6oWCOPTuY64Q" KAFKA_NODE_ID: 1 KAFKA_PROCESS_ROLES: "broker,controller" KAFKA_CONTROLLER_LISTENER_NAMES: "CONTROLLER" KAFKA_CONTROLLER_QUORUM_VOTERS: "1@kafka:29093" KAFKA_INTER_BROKER_LISTENER_NAME: "PLAINTEXT" KAFKA_LISTENERS: "PLAINTEXT://kafka:29092,CONTROLLER://kafka:29093,PLAINTEXT_HOST://0.0.0.0:9092" KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: "CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT" KAFKA_ADVERTISED_LISTENERS: "PLAINTEXT://kafka:29092,PLAINTEXT_HOST://localhost:9092" KAFKA_LOG_DIRS: "/tmp/kraft-combined-logs" KAFKA_REST_HOST_NAME: rest-proxy KAFKA_REST_BOOTSTRAP_SERVERS: "kafka:29092" KAFKA_REST_LISTENERS: "http://0.0.0.0:8082" kafka-ui: # Optional container_name: kafka-ui image: provectuslabs/kafka-ui:latest ports: - "8080:8080" depends_on: - kafka environment: KAFKA_CLUSTERS_0_NAME: local KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: kafka:29092 KAFKA_CLUSTERS_0_AUDIT_TOPICAUDITENABLED: 'true' KAFKA_CLUSTERS_0_AUDIT_CONSOLEAUDITENABLED: 'true'

confluent-local 이미지는 개발 환경을 위한 것이므로 프로덕션 환경에서는 cp-all-in-one-kraft 를 참고해서 cp-kafka 로 직접 구성해야합니다.

Kafka 클러스터 아이디

kafka-storage로 카프카에서 사용할 클러스터 아이디를 만들어야하며 kafka-storage 는 confluent-local 이미지에 포함되어 있어 아래와 같이 명령어를 실행하여 생성할 수 있다. How to generate Kafka cluster ID 에서는 kafka-storage 를 사용하지 않고도 Base64로 인코딩된 UUID를 만드는 방법에 대해서 알려주고 있으니 참고하면 좋겠다.

Terminal
# docker run --rm confluentinc/confluent-local:7.5.6 /bin/sh -c "/bin/uuidgen --time | tr -d '-' | base64 | cut -b 1-22" docker run --rm confluentinc/confluent-local:7.5.6 /bin/kafka-storage random-uuid EaJs_OcfTB6oWCOPTuY64Q

참고자료