Skip to content

Apache Kafka์— ๋Œ€ํ•œ ํ•™์Šต์„ ์œ„ํ•ด ๋„์ปค ์ปดํฌ์ฆˆ๋กœ ์นดํ”„์นด์— ๋Œ€ํ•œ ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•  ๋•Œ ๋Œ€๋ถ€๋ถ„ wurstmeister/kafka-docker ๋˜๋Š” confluentinc/cp-kafka ์‚ฌ์šฉํ•˜์—ฌ ZooKeeper ๊ธฐ๋ฐ˜์˜ ์นดํ”„์นด๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๋ณธ ๊ธ€์—์„œ๋Š” ์ปจํ”Œ๋ฃจ์–ธํŠธ์—์„œ ์ œ๊ณตํ•˜๋Š” confluentinc/confluent-local๋ฅผ ์‚ฌ์šฉํ•ด KRaft ๋ชจ๋“œ์˜ Apache Kafka์— ๋Œ€ํ•œ ํ•™์Šต ํ™˜๊ฒฝ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๊ณต์œ ํ•˜๊ณ ์ž ํ•œ๋‹ค.

๋„์ปค ์ปดํฌ์ฆˆ ๋ฌธ์„œ ์ž‘์„ฑ โ€‹

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๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์•Œ๋ ค์ฃผ๊ณ  ์žˆ์œผ๋‹ˆ ์ฐธ๊ณ ํ•˜๋ฉด ์ข‹๊ฒ ๋‹ค.

sh
# 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

์ฐธ๊ณ ์ž๋ฃŒ โ€‹

Released under the MIT License.