KafkaをローカルのDocker環境で、さくっと動かしてみました 　第２回


## 概要
Kafkaに魅せられて、とりあえず手元のマシンで動かしてみましょうか、、、と、インフラしか知らないSEがMacBookProを新たに購入し、Qiita等にアップされている諸先輩方の記事を参考にさせていただき、動作確認したまでの手順を数回に分け記載しています。
なお、Kafkaの概要につきましたは、[こちらの記事](https://qiita.com/sigmalist/items/5a26ab519cbdf1e07af3) を参照ください。

第２回は、[第１回](https://qiita.com/turupon/items/12268ddb95ecd7b7ae07)で作成したDockerコンテナ環境で Producerからメッセージを送り、Consumerでそのメッセージの受け取りを確認します。
簡単に絵を描くとこんな感じになります。
![kafka-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/544022/b5b484c2-503c-a299-0b50-33119f50cbce.png)

## 実行環境
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 で受け取れることを確認できました。


## 次回について
次回（第３回）はProducerからIoT疑似データを送り、Consumerでそのデータの受け取りを確認します。

[第１回：Kafka基本コンポーネントをローカルのDocker環境で稼働させる](https://qiita.com/turupon/items/12268ddb95ecd7b7ae07)
[第２回：Kafkaの Producerから送信されたメッセージが Broker を経由して Consumer で受け取れることの確認](//qiita.com/turupon/items/59eb602766a38bc3b621)
[第３回：Producer上のPythonプログラムで生成したデータを Broker を経由して Consumer で受け取れることの確認](https://qiita.com/turupon/items/60ac1ec68fe8148b9201)
[第４回：Producer上での生成データが topic-01 を経由して KSQL（topic01_stream１ → topic01_stream2） でストリーミング抽出処理されたことの確認](https://qiita.com/turupon/items/540be949ead3f4065553)
[第５回：Producer上での生成データが topic-01 → Ksql → topic-11 を経由して Consumer 上のPythonプログラムで受け取れることの確認](https://qiita.com/turupon/items/bd27834a42dda865469d)
[第６回：Producer上での生成データが topic-01 → Ksql → topic-11 を経由して Consumer 上のPythonプログラムによってS3に書き込めることの確認](https://qiita.com/turupon/items/5714c2cd45badd08f00b)
[第７回：２つのProducerコンテナ上で生成したそれぞれのデータが topic-01 → Ksql → topic-11 を経由して Consumer 上のPythonプログラムで受け取れることの確認](https://qiita.com/turupon/items/7f50d7b453a02989b88c)


## 参考情報
以下の情報を参考にさせていただきました。感謝申し上げます。
[Kafka の Docker のチュートリアル](https://qiita.com/psyashes/items/e50bdfe35a2e7778986d)
[Kafka からKSQLまで　Dockerで簡単環境構築](https://qiita.com/dublog/items/4b7f0d41a4075f794bd8)