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