Apache Kafka์ ๋ํ ํ์ต์ ์ํด ๋์ปค ์ปดํฌ์ฆ๋ก ์นดํ์นด์ ๋ํ ํ๊ฒฝ์ ๊ตฌ์ฑํ ๋ ๋๋ถ๋ถ wurstmeister/kafka-docker ๋๋ confluentinc/cp-kafka ์ฌ์ฉํ์ฌ ZooKeeper ๊ธฐ๋ฐ์ ์นดํ์นด๋ฅผ ์คํํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ค๋ช ํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ๋ณธ ๊ธ์์๋ ์ปจํ๋ฃจ์ธํธ์์ ์ ๊ณตํ๋ confluentinc/confluent-local๋ฅผ ์ฌ์ฉํด KRaft ๋ชจ๋์ Apache Kafka์ ๋ํ ํ์ต ํ๊ฒฝ์ ๋ง๋๋ ๊ฒ์ ๊ณต์ ํ๊ณ ์ ํ๋ค.
๋์ปค ์ปดํฌ์ฆ ๋ฌธ์ ์์ฑ โ
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๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ํด์ ์๋ ค์ฃผ๊ณ ์์ผ๋ ์ฐธ๊ณ ํ๋ฉด ์ข๊ฒ ๋ค.
# 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