kafka-docker でローカルに kafka クラスタを構築する – 駄文型より。
参考
-
- wurstmeister/kafka-docker: Dockerfile for Apache Kafka
-
- Kafka Docker
- Kafka in Dockerで分散メッセージングシステムを構築する – Qiita
環境
-
- OS X El Captain 10.11.6
-
- docker 17.03.1-ce
- docker-compose 1.11.2
手順
1. Download kafka-docker
$ git clone git@github.com:wurstmeister/kafka-docker.git
2. Update docker-compose.yml
docker-compose.yml を編集して zookeeper の Port と KAFKA_ADVERTISED_HOST_NAME を変更します。
version: '2'
services:
zookeeper:
image: wurstmeister/zookeeper
ports:
- "2181:2181" # "2181"に変更する
kafka:
build: .
ports:
- "9092"
environment:
KAFKA_ADVERTISED_HOST_NAME: 192.168.99.100 # ifconfig で調べる
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
volumes:
- /var/run/docker.sock:/var/run/docker.sock
3. Start the cluster
起動します。
$ docker-compose up -d
4. Scale Kafka instances
Kafkaのインスタンスを2つにしてみます。
$ docker-compose scale kafka=2
5. Note ZK_PORT
Kafka Shell に入る前に zookeeper コンテナのポートを確認しておきます。
Name Command State Ports
-----------------------------------------------------------------------------------------------------------------------------------
66f23109d78a_kafkadocker_zookeeper_1 /bin/sh -c /usr/sbin/sshd ... Up 0.0.0.0:32774->2181/tcp, 22/tcp, 2888/tcp, 3888/tcp
kafkadocker_kafka_1 start-kafka.sh Up 0.0.0.0:32775->9092/tcp
kafkadocker_kafka_2 start-kafka.sh Up 0.0.0.0:32773->9092/tcp
この場合、 ZK_PORT は 32774 でした。
6. Start Kafka Shell
Kafka Shell を起動して Kafka の設定を行います。
$ ./start-kafka-shell.sh $DOCKER_HOST_IP $ZK_HOST:$ZK_PORT
$DOCKER_HOST_IP: DockerホストのIP。 dockcer-compose.yml で KAFKA_ADVERTISED_HOST_NAME に設定した値。
$ZK_HOST: この場合は $DOCKER_HOST_IP と同じ。
$ZK_PORT: 5.で調べた値。
7. Create Topic
トピック名 topic 、パーティション数4でトピックを作成します。トピックについては こちら。 kafka-topics.sh の詳しい使い方は こちら。
$ $KAFKA_HOME/bin/kafka-topics.sh --create --topic topic \
--partitions 4 --replication-factor 1 --zookeeper $ZK # `$KAFKA_HOME/bin/` は省略できました。
確認
1. Describe topic
トピック名、パーティション数などを確認します。
$ ./start-kafka-shell.sh $DOCKER_HOST_IP $ZK_HOST:$ZK_PORT
$ $KAFKA_HOME/bin/kafka-topics.sh --describe --topic topic --zookeeper $ZK
Topic:topic PartitionCount:4 ReplicationFactor:1 Configs:
Topic: topic Partition: 0 Leader: 1002 Replicas: 1002 Isr: 1002
Topic: topic Partition: 1 Leader: 1010 Replicas: 1010 Isr: 1010
Topic: topic Partition: 2 Leader: 1009 Replicas: 1009 Isr: 1009
Topic: topic Partition: 3 Leader: 1010 Replicas: 1010 Isr: 1010
2. Start a producer
kafka-console-producer.sh と kafka-console-consumer.sh を使ってみます。まずは producer を起動します。
$ $KAFKA_HOME/bin/kafka-console-producer.sh --topic=topic \
--broker-list=`broker-list.sh`
3. Start a consumer
次に、別のシェルから consumer を起動します。 producer 側のシェルに入力した文字が表示されれば成功です!
$ ./start-kafka-shell.sh $DOCKER_HOST_IP $ZK_HOST:$ZK_PORT
$ $KAFKA_HOME/bin/kafka-console-consumer.sh --topic=topic --zookeeper=$ZK
おわり
コンテナを止めます。
$ docker-compose stop
ハマったところ
-
- zookeeper コンテナのポート設定
2181:2181 から 2181 に変更する必要がありました。
KAFKA_ADVERTISED_HOST_NAME の設定
チュートリアルに「Macの場合は docker-machine ip で確認した値を入れる」とあったので、docker-machine上でコンテナを立ち上げないとだめなのか?といろいろ右往左往してしましました。
start-kafka-shell.sh に渡す zookeeper のポート
docker-compose ps あるいは docker ps で確認する必要があったのですが、はじめは間違った値を入れていました。
トピックの設定
パーティション数を4にしたかったのですが、うまくいかずに kafka-topics.sh –delete したり kafka-topics.sh –alter したりしてました。