Anarchy In the 1K

Docerを用いてコマンドラインだけでKafka入門

目次

背景

 必要に迫られて、Kafkaの勉強をはじめました。今回はDockerを用いて環境を速攻で構築します。

ハンズオン

Kafka起動

 docker-compose.ymlに以下の通り記載し、該当ファイルが存在するディレクトリで上で、docker-compose up --no-recreate --scale kafka=<起動したいブローカー数>を発行します。

version: '3'
services:
  zookeeper:
    image: wurstmeister/zookeeper
    expose:
      - "2181"
  kafka:
    image: wurstmeister/kafka
    expose:
      - "9092"
    environment:
      HOSTNAME_COMMAND: hostname
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
    depends_on:
      - "zookeeper"

動作確認

トピック作成

 kafkaのコンテナ上で以下を実行します。

# /opt/kafka/bin/kafka-topics.sh --zookeeper zookeeper:2181 --create --partitions <任意の数> --replication-factor <任意の数> --topic test

主要なオプションに関しては、以下の通りです。

  • --partitions: パーティションの数を指定する。詳しくはこちらを参照ください。
  • --replication-factor: パーティション毎に作成されるレプリカの数を指定します。起動したブローカー数以下である必要があります。詳しくは、上記リンクを参照ください。

コンシューマ起動

 kafkaのコンテナ上で以下を実行します。

# /opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --group consumer-group

主要なオプションに関しては、以下の通りです。

  • --bootstrap-server: 定期的なメタデータ(どのブローカーが利用可能か)の取得先を設定する。あくまでメタデータの取得先であり、実データの読み込みは、全てのブローカーから行う。

プロデューサ起動

 kafkaのコンテナ上で以下を実行します。入力した文字がコンシューマ上で出力されます。

# /opt/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
> // 文字を入力

主要なオプションに関しては、以下の通りです。

  • --broker-list: 定期的なメタデータ(どのブローカーが利用可能か)の取得先を設定する。あくまでメタデータの取得先であり、実データの書き込みは、全てのブローカーへ行う。

オフセットの状態確認

 kafkaのコンテナ上で以下を実行します。トピック, パーティション毎のオフセットが確認可能です。

# /opt/kafka/bin/kafka-consumer-groups.sh --describe --bootstrap-server localhost:9092 --group consumer-group
GROUP           TOPIC           PARTITION  CURRENT-OFFSET  LOG-END-OFFSET  LAG             CONSUMER-ID     HOST            CLIENT-ID
consumer-group  test            0          130             143             13              -               -               -