docker-compose で Kafka の動作確認をしようとして、いつもハマるので基本的なやり方をメモしておく。
準備
ディレクトリを作って docker-compose.yml を書き込む。
$ mkdir kafka-test/
$ cd kafka-test/
$ vi docker-compose.yml
docker-compose.yml はこんな感じ。(KAFKA_ADVERTISED_HOST_NAME という環境変数の挙動がよく分かってなくていつもハマる。ちゃんと調べて理解しなきゃな…。)
version: '2'
services:
zookeeper:
image: wurstmeister/zookeeper
ports:
- "2181:2181"
kafka:
image: wurstmeister/kafka
ports:
- "9092"
environment:
KAFKA_ADVERTISED_HOST_NAME: 172.17.0.1
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
volumes:
- /var/run/docker.sock:/var/run/docker.sock
Kafka/Zookeeper 起動
docker-compose up する。
$ docker-compose up -d
Creating network "kafkatest_default" with the default driver
Creating kafkatest_zookeeper_1
Creating kafkatest_kafka_1
ps でちゃんと立ち上がっていることを確認。
$ docker-compose ps
Name Command State Ports
-------------------------------------------------------------------------------------------------------------------
kafkatest_kafka_1 start-kafka.sh Up 0.0.0.0:32778->9092/tcp
kafkatest_zookeeper_1 /bin/sh -c /usr/sbin/sshd ... Up 0.0.0.0:2181->2181/tcp, 22/tcp, 2888/tcp, 3888/tcp
動作確認
ここでは公式のクイックスタートを参考に、基本的な操作を実行してみる。
トピック作成。
$ docker-compose exec kafka /opt/kafka/bin/kafka-topics.sh --create --zookeeper zookeeper:2181 --replication-factor 1 --partitions 1 --topic test
Created topic "test".
トピック一覧。
$ docker-compose exec kafka /opt/kafka/bin/kafka-topics.sh --list --zookeeper zookeeper:2181
test
メッセージ送信。
$ docker-compose exec kafka /opt/kafka/bin/kafka-console-producer.sh --broker-list kafka:9092 --topic test
test
test
test
メッセージ受信。
$ docker-compose exec kafka /opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server kafka:9092 --tic test --from-beginning
test
test
test
以上です。
参考資料
- Apache Kafka