LoginSignup
13
13

More than 3 years have passed since last update.

Kafka in Docker のチュートリアル

Posted at

内容

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

公式チュートリアル

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 を試してみる

13
13
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
13
13