概要
Kafkaに魅せられて、とりあえず手元のマシンで動かしてみましょうか、、、と、インフラしか知らないSEがMacBookProを新たに購入し、Qiita等にアップされている諸先輩方の記事を参考にさせていただき、動作確認したまでの手順を数回に分け記載しています。
なお、Kafkaの概要につきましたは、こちらの記事 を参照ください。
第2回は、第1回で作成したDockerコンテナ環境で Producerからメッセージを送り、Consumerでそのメッセージの受け取りを確認します。
簡単に絵を描くとこんな感じになります。
実行環境
macOS Big Sur 11.1
Docker version 20.10.2, build 2291f61
Python 3.8.3
最初に
起動しているコンテナを確認します。
$ docker-compose ps
Name Command State Ports
----------------------------------------------------------------------------------------------------------
broker /etc/confluent/docker/run Up 0.0.0.0:29092->29092/tcp, 0.0.0.0: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, 3888/tcp
Topicの作成
Producerからメッセージを送り、Consumerでそのメッセージの受け取るために、Topicを作成します。
そのために、broker に接続します。
$ docker exec -it broker /bin/bash
root@broker:/#
「sample-topic」という topic を作成します。
root@broker:/# kafka-topics --bootstrap-server broker:9092 --create --topic sample-topic --partitions 3 replication-factor 1
Created topic sample-topic.
作成された 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でのメッセージ受け取り設定
cli に接続します。
$ docker exec -it cli /bin/bash
root@cli:/#
Consumer としてメッセージ受け取りの設定をします。
root@cli:/# kafka-console-consumer --bootstrap-server broker:29092 --topic sample-topic --group G1 --from-beginning
↑ プロンプトが何も表示されない状態ですが、Producerからのメッセージの受け取りを待っています。
Producerからのメッセージ送信
メッセージを送信するために別ターミナルを立ち上げ、cli に接続します。
$ docker exec -it cli /bin/bash
root@cli:/#
Producer としてメッセージ送信の設定をします。
root@cli:/# kafka-console-producer --broker-list broker:29092 --topic sample-topic
>
プロンプト「>」の後に、適当にメッセージを入力してみましょう。
Consumerのプロンプトに今入力したメッセージが表示されます。
root@cli:/# kafka-console-producer --broker-list broker:29092 --topic sample-topic
>Hello World
>Good Good Good !!!
>
--------------
root@cli:/# kafka-console-consumer --bootstrap-server broker:29092 --topic sample-topic --group G1 --from-beginning
Hello World
Good Good Good !!!
これで、Kafkaの基本中の基本の動作確認である Producerから送信されたメッセージが Broker を経由して Consumer で受け取れることを確認できました。
次回について
次回(第3回)はProducerからIoT疑似データを送り、Consumerでそのデータの受け取りを確認します。
第1回:Kafka基本コンポーネントをローカルのDocker環境で稼働させる
第2回:Kafkaの Producerから送信されたメッセージが Broker を経由して Consumer で受け取れることの確認
第3回:Producer上のPythonプログラムで生成したデータを Broker を経由して Consumer で受け取れることの確認
第4回:Producer上での生成データが topic-01 を経由して KSQL(topic01_stream1 → topic01_stream2) でストリーミング抽出処理されたことの確認
第5回:Producer上での生成データが topic-01 → Ksql → topic-11 を経由して Consumer 上のPythonプログラムで受け取れることの確認
第6回:Producer上での生成データが topic-01 → Ksql → topic-11 を経由して Consumer 上のPythonプログラムによってS3に書き込めることの確認
第7回:2つのProducerコンテナ上で生成したそれぞれのデータが topic-01 → Ksql → topic-11 を経由して Consumer 上のPythonプログラムで受け取れることの確認
参考情報
以下の情報を参考にさせていただきました。感謝申し上げます。
Kafka の Docker のチュートリアル
Kafka からKSQLまで Dockerで簡単環境構築