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
を変更します。
wurstmeister/kafka-docker/docker-compose.yml
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上でコンテナを立ち上げないとだめなのか?といろいろ右往左往してしましました。
- チュートリアルに「Macの場合は
-
start-kafka-shell.sh
に渡す zookeeper のポート-
docker-compose ps
あるいはdocker ps
で確認する必要があったのですが、はじめは間違った値を入れていました。
-
- トピックの設定
- パーティション数を4にしたかったのですが、うまくいかずに
kafka-topics.sh --delete
したりkafka-topics.sh --alter
したりしてました。
- パーティション数を4にしたかったのですが、うまくいかずに