Docker ComposeでKafkaを構築してどんなものかざっくり理解する
2023.02.08
2024.03.24
ミドルウェア
Docker Composekafkazookeeper
はじめに
Docker ComposeでKafkaを構築して、Kafkaがどんなものかをざっくり理解していきます。
Kafkaとは
Kafka(Apache Kafka)とは、**イベントストリーミングプラットフォーム(ミドルウェア)**になります。
イベントストリーミングとは、データ(イベント)を受け取り、格納し、処理して、次の宛先に送るようなことを言います。
下記のようなイベントストリーミングに必要な機能がKafkaには備わっています。
- ストリームデータの継続的なPublish(書き込み)とSubscribe(読み取り)
- ストリームデータの保持
- ストリームデータの処理
Kafkaは、メッセージングやログの集約、ストリーム処理などに使われます。
アーキテクチャと用語
Kafkaのアーキテクチャはざっくり下記のようになっています。
Kafkaで出てくる主な用語の意味は下記の通りです。
イベント
: Kafkaでのデータの単位(レコードやメッセージとも呼ばれる)Broker
: KafkaサーバーProducer
: イベントを書き込む(Publish)Consumer
: イベントを読み取って処理(Subscribe)Topic
: イベントを分類して格納(イベントをファイルと考えたときのフォルダのようなもの)Partiton
: Topicを分割したもの
Docker Composeで試す
Docker ComposeでKafkaを動かしてみて、Kafkaがどんなものか実際に体感してみたいと思います。
Kafkaを動かす
まずはDocker ComposeでKafkaを構築します。ここでは、Bitnamiのイメージを利用します。
docker-compose.yml
は下記の通りです。
1version: "3"
2
3services:
4 zookeeper:
5 image: docker.io/bitnami/zookeeper:3.8
6 ports:
7 - "2181:2181"
8 volumes:
9 - "zookeeper_data:/bitnami"
10 environment:
11 - ALLOW_ANONYMOUS_LOGIN=yes
12 kafka:
13 image: docker.io/bitnami/kafka:3.3
14 ports:
15 - "9092:9092"
16 volumes:
17 - "kafka_data:/bitnami"
18 environment:
19 - KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
20 - ALLOW_PLAINTEXT_LISTENER=yes
21 depends_on:
22 - zookeeper
23
24volumes:
25 zookeeper_data:
26 driver: local
27 kafka_data:
28 driver: local
起動します。
1docker compose up -d
コンテナが起動したら、Kafkaのコンテナに接続しておきます。
1docker exec -it kafka-kafka-1 /bin/bash
Topicの作成
まずはKafkaのコマンドラインツールでイベントが格納されるTopicを作成します。
1kafka-topics.sh --create --topic sample-events --bootstrap-server localhost:9092
イベントの書き込み
次は、Producerのコマンドを使って、イベントを先ほど作成したTopicに書き込みます。
1kafka-console-producer.sh --topic sample-events --bootstrap-server localhost:9092
入力した各行がイベントとして書き込まれます。
1I have no name!@fe5e69f6b112:/$ kafka-console-producer.sh --topic sample-events --bootstrap-server localhost:9092
2>hello
3>world
4>hoge
5>foo
イベントの読み込み
書き込んだイベントをConsumerコマンドを使って読み込みます。
1kafka-console-consumer.sh --topic sample-events --from-beginning --bootstrap-server localhost:9092
先ほど入力したイベントを確認することができます。
1I have no name!@fe5e69f6b112:/$ kafka-console-consumer.sh --topic sample-events --from-beginning --bootstrap-server localhost:9092
2hello
3world
4hoge
5foo
別端末を起動し、Producerからイベントを書き込むとすぐにConsumer側に表示されるのが確認できます。
参考
- Apache Kafka
- bitnami/kafka - Docker Image | Docker Hub
- containers/bitnami/kafka at main · bitnami/containers
Share