Help us understand the problem. What is going on with this article?

Kafka in Docker のチュートリアル

内容

公式のチュートリアルにはバージョンなどが原因で不備があるので、それを修正して解説したものを書きました。

公式チュートリアル

Install

dockerのインストールは前提とし、kafka-dockerをインストールします。

$ git clone git@github.com:wurstmeister/kafka-docker.git

docker-compose.ymlの修正

zookeeperのホストのポートは2181に制限したままだと接続できないので削除します。
KAFKA_ADVERTISED_HOST_NAMEはDockerホストのIPアドレスに変更します。

docker-compose.yml
version: '2'
services:
  zookeeper:
    image: wurstmeister/zookeeper
    ports:
      - "2181"
  kafka:
    build: .
    ports:
      - "9092"
    environment:
      KAFKA_ADVERTISED_HOST_NAME: 192.168.100.93
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

起動と確認

$ docker-compose up -d
$ docker-compose ps
      Name                     Command               State                          Ports
----------------------------------------------------------------------------------------------------------------
kafka_kafka_1       start-kafka.sh                   Up      0.0.0.0:32768->9092/tcp
kafka_zookeeper_1   /bin/sh -c /usr/sbin/sshd  ...   Up      0.0.0.0:32769->2181/tcp, 22/tcp, 2888/tcp, 3888/tcp

Topicを作成し、Producerでメッセージを送る

Kafka shell を起動。
ZK_HOSTにはKAFKA_ADVERTISED_HOST_NAMEで設定したIPを入れます。
ZK_PORTにはzookeeperのコンテナのポートを入れます。

$ ./start-kafka-shell.sh <DOCKER_HOST_IP> <ZK_HOST:ZK_PORT>

Topicを作成。
testというTopic名でPartitionは4に設定します。
$ZKには<KAFKA_ADVERTISED_HOST_NAMEで設定したIP:zookeeperのホストのポート>を入れます。

$ $KAFKA_HOME/bin/kafka-topics.sh --create --topic test --partitions 4 --zookeeper $ZK --replication-factor 1

作成されたTopicを確認。
ちゃんと4つありますね。

$ $KAFKA_HOME/bin/kafka-topics.sh --describe --topic test --zookeeper $ZK
Topic:test  PartitionCount:4    ReplicationFactor:1 Configs:
    Topic: test Partition: 0    Leader: 1001    Replicas: 1001  Isr: 1001
    Topic: test Partition: 1    Leader: 1001    Replicas: 1001  Isr: 1001
    Topic: test Partition: 2    Leader: 1001    Replicas: 1001  Isr: 1001
    Topic: test Partition: 3    Leader: 1001    Replicas: 1001  Isr: 1001

Producerを起動し、適当なメッセージを送る

$KAFKA_HOME/bin/kafka-console-producer.sh --topic=test --broker-list=`broker-list.sh`
>test1
>test2
>test3
>test4

Consumerを起動し、メッセージを受け取る

Producerは起動したまま、別のshellからconsumerを起動し、メッセージを受け取ります。
ちゃんと全て受け取れてますね

./start-kafka-shell.sh <DOCKER_HOST_IP> <ZK_HOST:ZK_PORT>
$KAFKA_HOME/bin/kafka-console-consumer.sh --bootstrap-server=`broker-list.sh` --topic=test --from-beginning
test2
test3
test4
test1

参考

公式チュートリアル
Kafka を試してみる

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした