0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DockerのApache Kafka環境構築

Last updated at Posted at 2024-12-24

ローカル環境にDockerを使用してApache Kafkaを構築する方法を説明します。KafkaはZooKeeperを必要とするため、Docker Composeを使用してKafkaとZooKeeperを一緒に構築するのが一般的です。

手順 1: Docker と Docker Compose のインストール

まず、DockerとDocker Composeがインストールされていることを確認してください。

  • Dockerのインストール: Docker公式サイト
  • Docker ComposeはDocker Desktopに含まれています。以下のコマンドでインストール済みか確認してください
docker-compose --version

手順 2: プロジェクトディレクトリの作成

Kafkaを構築するためのプロジェクトディレクトリを作成します。

mkdir kafka-docker-compose
cd kafka-docker-compose

手順 3: docker-compose.yml ファイルの作成

プロジェクトディレクトリ内に docker-compose.yml ファイルを作成し、以下の内容を記述します。

version: '3.8'

services:
  zookeeper:
    image: confluentinc/cp-zookeeper:latest
    container_name: zookeeper
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_TICK_TIME: 2000
    ports:
      - "2181:2181"

  kafka:
    image: confluentinc/cp-kafka:latest
    container_name: kafka
    depends_on:
      - zookeeper
    ports:
      - "9092:9092"
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092
      KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1

設定のポイント

  • ZooKeeper:
    KafkaはZooKeeperを使用してクラスタの管理を行います。
    ZOOKEEPER_CLIENT_PORT はZooKeeperのポート番号(デフォルトは2181)。
  • Kafka:
    KAFKA_ZOOKEEPER_CONNECT: ZooKeeperの接続情報を指定します。
    KAFKA_ADVERTISED_LISTENERS: Kafkaブローカーが外部からアクセスされる際のアドレスを指定します。
    KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 単一ノード構成の場合は1に設定します。

手順 4: Docker Compose でコンテナを起動

以下のコマンドを実行して、KafkaとZooKeeperのコンテナを起動します。

docker-compose up -d

コマンドの説明
-d オプション: コンテナをバックグラウンドで実行します。
起動後、以下のコマンドでコンテナの状態を確認できます。

docker-compose ps

手順 5: Kafkaの動作確認

Kafkaが正常に動作しているか確認するために、Kafkaのコンテナ内でトピックを作成し、メッセージを送受信します。

Kafkaコンテナに入る
以下のコマンドでKafkaコンテナに入ります。

docker exec -it kafka bash

トピックの作成
Kafkaのトピックを作成します。以下のコマンドを実行してください。

kafka-topics --create --topic test-topic --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1

--topic test-topic: トピック名を指定します。
--partitions 1: パーティション数を指定します。
--replication-factor 1: レプリケーション数を指定します(単一ノードの場合は1)。
トピックの確認
作成したトピックを確認します。

kafka-topics --list --bootstrap-server localhost:9092

トピック詳細の確認

kafka-topics --bootstrap-server localhost:9092 --describe --topic test-topic

トピックデータ保持期間(Retention Period)の確認
各オプションの説明:
--bootstrap-server <ブローカーのアドレス>:
Kafkaブローカーのアドレスを指定します(例: localhost:9092)。
--entity-type topics:
トピックの設定を対象にすることを指定します。
--entity-name <トピック名>:
設定を確認したいトピック名を指定します。
--describe:
トピックの設定を表示します。

kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name my-topic --describe

出力例:

Configs for topic 'my-topic' are:
  retention.ms=604800000
  cleanup.policy=delete
  segment.bytes=1073741824

出力結果の解釈
retention.ms:
トピックのデータ保持期間をミリ秒単位で指定します。
例: 604800000 は 7日間(7 * 24 * 60 * 60 * 1000 ミリ秒)を意味します。
cleanup.policy:
データの削除ポリシーを指定します。
delete: 古いデータを削除する(デフォルト)。
compact: 古いデータを圧縮する。
その他の設定(例: segment.bytes)も表示されますが、データ保持期間に直接関係するのは主に retention.ms です。

トピックデータ保持期間(Retention Period)の変更
注意点
デフォルト設定の影響:

トピックごとに retention.ms が設定されていない場合、ブローカー全体のデフォルト設定(log.retention.ms)が適用されます。
データ保持期間の単位:

retention.ms はミリ秒単位で指定します。
例: 1日 = 24 * 60 * 60 * 1000 = 86400000 ミリ秒。
ディスク容量の管理:

データ保持期間を長く設定すると、ディスク容量を圧迫する可能性があります。適切な値を設定してください。

kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name my-topic --alter --add-config retention.ms=259200000

トピックの削除

kafka-topics.sh --bootstrap-server localhost:9092 --delete --topic my-topic

メッセージの送信
以下のコマンドでプロデューサーを起動し、メッセージを送信します。

kafka-console-producer --topic test-topic --bootstrap-server localhost:9092

プロデューサーが起動したら、任意のメッセージを入力してEnterを押します。

メッセージの受信
別のターミナルで以下のコマンドを実行し、コンシューマーを起動します。

docker exec -it kafka kafka-console-consumer --topic test-topic --bootstrap-server localhost:9092 --from-beginning

プロデューサーで送信したメッセージがコンシューマーで受信できれば、Kafkaが正常に動作していることが確認できます。

手順 6: コンテナの停止と削除

コンテナの停止
KafkaとZooKeeperのコンテナを停止するには以下を実行します。

docker-compose down

データを完全に削除する場合
以下のコマンドでボリュームも削除します。

docker-compose down -v

手順 7: ディレクトリ構成の例

最終的なプロジェクトディレクトリ構成は以下のようになります。

kafka-docker-compose/
├── docker-compose.yml
以上で、Docker Composeを使用したローカル環境でのKafka構築が完了です!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?