kafka on Docker
Publish date: Feb 20, 2022Tags: Tech
Table of contents
Kafka on Docker
なんだか二度目な気がするけれど気のせいです
docker-compose.yml
version: "3"
services:
zookeeper:
image: confluentinc/cp-zookeeper:5.5.1
hostname: zookeeper
container_name: zookeeper
ports:
- "32181:32181"
environment:
ZOOKEEPER_CLIENT_PORT: 32181
ZOOKEEPER_TICK_TIME: 2000
broker:
image: confluentinc/cp-kafka:5.5.1
hostname: broker
container_name: broker
depends_on:
- zookeeper
ports:
- "9092:9092"
- "29092:29092"
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: "zookeeper:32181"
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://broker:29092,PLAINTEXT_HOST://localhost:9092
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
CONFLUENT_SUPPORT_METRICS_ENABLE: "false"
cli:
image: confluentinc/cp-kafka:5.5.1
hostname: cli
container_name: cli
depends_on:
- broker
entrypoint: /bin/sh
tty: true
networks:
default:
external:
name: iot_network
そういえば、先日知ったのですが!docker-compose コマンドが、Docker CLI にサブコマンド compose という形で実装されて docker compose ps
ができるようになったらしいです。Usage を見ると docker-compose のほうが少しだけ Options の種類が多そうに見えるのですが、docker-compose で非推奨のものはわざわざ実装しないという方針のよう?
docker-composeとComposeコマンドの互換性
実際に docker compose ps
で各コンテナの様子を見てみます。
suwa3@mb12 kafka-on-docker % docker compose ps
WARN[0000] network default: network.external.name is deprecated in favor of network.name
NAME COMMAND SERVICE STATUS PORTS
broker "/etc/confluent/dock…" broker running 0.0.0.0:9092->9092/tcp, :::9092->9092/tcp, 0.0.0.0:29092->29092/tcp, :::29092->29092/tcp
cli "/bin/sh" cli running 9092/tcp
zookeeper "/etc/confluent/dock…" zookeeper running 2181/tcp, 2888/tcp, 3888/tcp, 0.0.0.0:32181->32181/tcp, :::32181->32181/tcp
おおー
ちなみに docker-compose ps
だと?
suwa3@mb12 kafka-on-docker % docker-compose ps
Name Command State Ports
--------------------------------------------------------------------------------------------------------------------------------------
broker /etc/confluent/docker/run Up 0.0.0.0:29092->29092/tcp,:::29092->29092/tcp, 0.0.0.0:9092->9092/tcp,:::9092->9092/tcp
cli /bin/sh Up 9092/tcp
zookeeper /etc/confluent/docker/run Up 2181/tcp, 2888/tcp, 0.0.0.0:32181->32181/tcp,:::32181->32181/tcp, 3888/tcp
ついでに docker ps
suwa3@mb12 kafka-on-docker % docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
067c2378baa3 confluentinc/cp-kafka:5.5.1 "/bin/sh" 4 minutes ago Up 4 minutes 9092/tcp cli
c5e59034f74d confluentinc/cp-kafka:5.5.1 "/etc/confluent/dock…" 4 minutes ago Up 4 minutes 0.0.0.0:9092->9092/tcp, :::9092->9092/tcp, 0.0.0.0:29092->29092/tcp, :::29092->29092/tcp broker
1a46f79259cb confluentinc/cp-zookeeper:5.5.1 "/etc/confluent/dock…" 4 minutes ago Up 4 minutes 2181/tcp, 2888/tcp, 3888/tcp, 0.0.0.0:32181->32181/tcp, :::32181->32181/tcp zookeeper
docker compose ps と docker ps は、Docker CLI ということで見え方が似ていますね。
脱線しているので Kafka に戻りたいと思います。
Topicの作成
コンテナの起動は確認できたので、Topic を作成したいと思います。
broker コンテナに接続します。
% docker exec -it broker /bin/bash
kafka-topics コマンド (使い方は kafka-topics --help
で確認)
–bootstrap-server: 接続先のKafkaサーバーを指定します
–create: 新規 Topic を作成します
–topic: 作成、変更、記述、削除するトピックを指定します
–partitions: パーティション数を指定します
–replication-factor: クラスター全体のレプリカの総数。今回は係数1で指定しているため、コピーが1つ作られます
root@broker:/# kafka-topics --bootstrap-server broker:9092 --create --topic sample-topic --partitions 3 replication-factor 1
Created topic sample-topic.
Topic の確認
–describe: Topic の詳細を見ることができます
root@broker:/# kafka-topics --bootstrap-server broker:9092 --describe --topic sample-topic
Topic: sample-topic PartitionCount: 3 ReplicationFactor: 1 Configs:
Topic: sample-topic Partition: 0 Leader: 1 Replicas: 1 Isr: 1
Topic: sample-topic Partition: 1 Leader: 1 Replicas: 1 Isr: 1
Topic: sample-topic Partition: 2 Leader: 1 Replicas: 1 Isr: 1
Consumer のグループIDなどを確認します
root@broker:/# kafka-consumer-groups --describe --bootstrap-server broker:9092 --all-groups
Consumer group 'G1' has no active members.
GROUP TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG CONSUMER-ID HOST CLIENT-ID
G1 sample-topic 0 0 0 0 - - -
G1 sample-topic 1 1 1 0 - - -
G1 sample-topic 2 0 0 0 - - -
Consumer の設定
cli コンテナに接続します
docker exec -it cli /bin/bash
kafka-console-consumer
コマンドを使用することで Consumer として操作することができます。
–group: Consumer のグループIDを指定します
–from-beginning: offsetの最初から読み込みます
root@cli:/# kafka-console-consumer --bootstrap-server broker:29092 --topic sample-topic --group G1 --from-beginning
※プロンプトには何も表示されません
Producer の設定
別ターミナルを立ち上げて cli コンテナに接続します
docker exec -it cli /bin/bash
kafka-console-producer
コマンドを使用することで Producer として操作することができます。
root@cli:/# kafka-console-producer --broker-list broker:29092 --topic sample-topic
>
>
の後ろにtesting!!
と書いてみます
先程の Consumer の設定をしたタブに戻り確認すると
root@cli:/# kafka-console-consumer --bootstrap-server broker:29092 --topic sample-topic --group G1 --from-beginning
testing!!
無事に、testing!!
を確認することができました。
参照:
KafkaをローカルのDocker環境で、さくっと動かしてみました 第1回
KafkaをローカルのDocker環境で、さくっと動かしてみました 第2回