0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

kafkaをdockerで起動して遊んでみる

Last updated at Posted at 2025-07-14

Kafkaを手元で立てて遊べるように、confluent公式に従ってkafkaを立ち上げてみようと思います。実際にはproducerやconsumerとして何かしらのAPIを繋げて使うのが一般的かと思いますが、今回は付属のシェルスクリプトやUIでメッセージのproduce/consumeをして遊んでみようと思います。

composeファイル

kafkaとkafka UIの2つのコンテナを立てます。
コマンドラインからCLIで操作や確認をすることもできますが、やりやすいようにUIも使いたいと思います。

networks:
  kafka-net:
    name: kafka-net

services:
  broker:
    image: apache/kafka:latest
    container_name: broker
    ports:
      - "9092:9092"
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_PROCESS_ROLES: broker,controller
      KAFKA_NODE_ID: 1
      KAFKA_LISTENERS: PLAINTEXT://broker:29092,CONTROLLER://broker:29093,PLAINTEXT_HOST://0.0.0.0:9092
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://broker:29092,PLAINTEXT_HOST://localhost:9092
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,CONTROLLER:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
      KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER
      KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
      KAFKA_CONTROLLER_QUORUM_VOTERS: 1@broker:29093
      KAFKA_LOG_DIRS: /tmp/kraft-combined-logs
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      CLUSTER_ID: MkU3OEVBNTcwNTJENDM2Qk
    networks:
      - kafka-net
    healthcheck:
      test: ["CMD-SHELL", "/opt/kafka/bin/kafka-metadata-quorum.sh --bootstrap-controller broker:29093 describe --status | grep LeaderId"]
      interval: 10s
      timeout: 10s
      retries: 10

  kafka-ui:
    image: provectuslabs/kafka-ui
    container_name: kafka-ui
    ports:
      - "8080:8080"
    environment:
      DYNAMIC_CONFIG_ENABLED: "true"
      KAFKA_CLUSTERS_0_NAME: "local"
      KAFKA_CLUSTERS_0_BOOTSTRAP_SERVERS: "broker:29092"
    networks:
      - kafka-net

Note

元々Kafkaはzookeeperというアプリも別コンテナで立ち上げて、繋げる必要がありましたが、新しいバージョンではzookeeper無しでも使えてよりシンプルになっています。

起動

docker-compose up -d

で起動します。こんな感じでログの最後に"Kafka Server started"のInfoログが出ていればOKです。

$ docker logs --tail 5 broker
[2025-07-14 14:49:26,144] INFO [BrokerServer id=1] Transition from STARTING to STARTED (kafka.server.BrokerServer)
[2025-07-14 14:49:26,145] INFO Kafka version: 4.0.0 (org.apache.kafka.common.utils.AppInfoParser)
[2025-07-14 14:49:26,146] INFO Kafka commitId: 985bc99521dd22bb (org.apache.kafka.common.utils.AppInfoParser)
[2025-07-14 14:49:26,146] INFO Kafka startTimeMs: 1752504566145 (org.apache.kafka.common.utils.AppInfoParser)
[2025-07-14 14:49:26,149] INFO [KafkaRaftServer nodeId=1] Kafka Server started (kafka.server.KafkaRaftServer)

UIには
http://localhost:8080/
でアクセスできます。

停止

docker-compose down -v

でコンテナを停止させます。

CLIでの操作

次のコマンドでコンテナの中の環境でbashを起動して操作します。

$ docker exec -it -w /opt/kafka/bin broker sh

トピックの作成

次のコマンドでトピックを作成します。partitionを3つ用意してみました。

/opt/kafka/bin $ ./kafka-topics.sh --create --topic my-topic --bootstrap-server broker:29092 --partitions 3 --replication-factor 1
Created topic my-topic.

できたトピックを確認します。

/opt/kafka/bin $ ./kafka-topics.sh --describe --topic my-topic --bootstrap-server broker:29092

Topic: my-topic TopicId: KjAZUQozRU6QBQgoahPiIQ PartitionCount: 3       ReplicationFactor: 1    Configs: 
        Topic: my-topic Partition: 0    Leader: 1       Replicas: 1     Isr: 1  Elr:    LastKnownElr:
        Topic: my-topic Partition: 1    Leader: 1       Replicas: 1     Isr: 1  Elr:    LastKnownElr: 
        Topic: my-topic Partition: 2    Leader: 1       Replicas: 1     Isr: 1  Elr:    LastKnownElr:
/opt/kafka/bin $ 

メッセージをproduce

以下のコマンドでstringメッセージをproduceするコンソールが起動します。
ctrl+cで中断できます。

/opt/kafka/bin $ ./kafka-console-producer.sh  --topic my-topic --bootstrap-server broker:29092
>All streams
>lead to Kafka
>^C

メッセージをconsume

同様に以下のコマンドでconsumeしたmessageが順次表示されます。
consumer group IDを指定してみました。
こちらもctrl+cで中断できます。

./kafka-console-consumer.sh --bootstrap-server broker:29092 --topic my-topic --group my-consumer-group --from-beginning
All streams
lead to Kafka
^CProcessed a total of 2 messages

先ほどproduceした"All stream lead to Kafka"が出力されました。

Kafka UIで操作、確認

トピックの確認

先ほどCLIから作ったtopicをUIから見てみます。
image.png

"my-topic"をクリックすると詳細が表示されます。
image.png
image.png

先ほどproduceしたメッセージはpartition No.1に入っていることが分かります。

consumerのページからはmy-consumer-group(先ほどコンソールで読んだときにつけたconsumer group ID)でcosumeしたログが残っています。

トピックの作成

TopicsページのAdd a Topicボタンから以下のダイアログが出てきます。ここからtopicを作ることもできます。
image.png

メッセージのproduce

topicをクリックし詳細のページに行くと、Produce messageボタンからメッセージをproduceできます。
image.png

Ref

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?