Docker ComposeでKafkaを構築してどんなものかざっくり理解する

スポンサーリンク

はじめに

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は下記の通りです。

version: "3"

services:
  zookeeper:
    image: docker.io/bitnami/zookeeper:3.8
    ports:
      - "2181:2181"
    volumes:
      - "zookeeper_data:/bitnami"
    environment:
      - ALLOW_ANONYMOUS_LOGIN=yes
  kafka:
    image: docker.io/bitnami/kafka:3.3
    ports:
      - "9092:9092"
    volumes:
      - "kafka_data:/bitnami"
    environment:
      - KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
      - ALLOW_PLAINTEXT_LISTENER=yes
    depends_on:
      - zookeeper

volumes:
  zookeeper_data:
    driver: local
  kafka_data:
    driver: local

起動します。

docker compose up -d

コンテナが起動したら、Kafkaのコンテナに接続しておきます。

docker exec -it kafka-kafka-1 /bin/bash

Topicの作成

まずはKafkaのコマンドラインツールでイベントが格納されるTopicを作成します。

kafka-topics.sh --create --topic sample-events --bootstrap-server localhost:9092

イベントの書き込み

次は、Producerのコマンドを使って、イベントを先ほど作成したTopicに書き込みます。

kafka-console-producer.sh --topic sample-events --bootstrap-server localhost:9092

入力した各行がイベントとして書き込まれます。

I have no name!@fe5e69f6b112:/$ kafka-console-producer.sh --topic sample-events --bootstrap-server localhost:9092
>hello
>world
>hoge
>foo

イベントの読み込み

書き込んだイベントをConsumerコマンドを使って読み込みます。

kafka-console-consumer.sh --topic sample-events --from-beginning --bootstrap-server localhost:9092

先ほど入力したイベントを確認することができます。

I have no name!@fe5e69f6b112:/$ kafka-console-consumer.sh --topic sample-events --from-beginning --bootstrap-server localhost:9092
hello
world
hoge
foo

別端末を起動し、Producerからイベントを書き込むとすぐにConsumer側に表示されるのが確認できます。

参考

タイトルとURLをコピーしました