Contents
5分で完了!Docker ComposeによるKafka環境構築の導入
ローカル開発環境にApache Kafkaをセットアップする際、ZooKeeperとの連携やバージョン管理が手間となるケースは多いです。本記事では、Docker Composeを使用して5分でApache Kafka 3.8の簡易環境を構築できる方法を解説します。開発者はこの設定例をコピーしてすぐ利用可能で、テスト用トピックの作成やメッセージ送信の確認が可能です。
DockerとDocker Composeの事前インストール手順
Kafka環境構築には、まずDockerおよびDocker Composeをインストールする必要があります。以下に各OSでの確認方法とバージョンチェックのコマンドを記載します。
Dockerのインストール確認方法
- macOS / Windows: Docker Desktopアプリを起動し、「About Docker」でバージョンを確認
- Linux(Ubuntu例):
bash
sudo apt update && sudo apt install docker.io -y
Docker Composeのバージョンチェック
Docker Composeは、docker-compose --versionコマンドで確認できます。
推奨バージョン:1.29以降(Kafka 3.8との互換性を保つため)
重要ポイント:最新版のDocker Composeを使用することで、サービス定義ファイルのエラーメッセージが明確になり、トラブルシューティングが容易になります。
ZooKeeperとの連携設定方法
KafkaはZooKeeperに依存するため、Docker Composeで両者を一緒に構築します。
Kafkaが依存するZooKeeperの役割
ZooKeeperは、Kafkaクラスター内のノード管理やトピック情報の共有を行う中心的な役割を果たします。初心者向けに説明すると、「分散システムの仲介役」と考えてください。KafkaサービスはZooKeeperに接続して情報を取得するため、ネットワーク設定が不可欠です。
技術的背景補足:ZooKeeperは、分散環境における状態共有や一貫性を保つための中心デーモンです。これにより、Kafkaは複数ノードでのトピック管理やレプリケーションを実現します。
Docker Composeファイルの記述例(バージョン3.8対応)
Docker Composeファイルはversion: '3.8'を指定し、サービスごとの設定を明確にします。
サービス定義の構造解説
version: Docker Composeのバージョンを指定(3.8が推奨)services: 定義するコンテナリスト(ZooKeeperとKafkaを記述)depends_on: 依存関係を明示的に設定(サービス起動順を制御)
環境変数とポートマッピングの設定
以下は具体的な設定例です:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
version: '3.8' services: zookeeper: image: zookeeper:3.8 ports: - "2181:2181" environment: ZOOKEEPER_CLIENT_PORT: 2181 kafka: image: bitnami/kafka:latest ports: - "9092:9092" depends_on: - zookeeper environment: KAFKA_BROKER_ID: 1 KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 |
バージョン3.8の特徴:
depends_onはサービス起動順を指定するだけで、依存サービスが完全に起動した後で実行されるとは限らないため、healthcheckなどの追加設定が必要な場合もあります。
サービス起動後の接続確認手順
Docker Composeファイルを保存してdocker-compose up -dで起動後、以下のようにテストします。
Kafkaプロダーやコンシューマーの動作テスト
-
テストトピックを作成:
bash
docker exec -it kafka kafka-topics.sh --create --topic test-topic --partitions 1 --replication-factor 1 --bootstrap-server localhost:9092 -
メッセージを送信(プロデューサー):
bash
docker exec -it kafka kafka-console-producer.sh --topic test-topic --bootstrap-server localhost:9092 -
メッセージを受信(コンシューマー):
bash
docker exec -it kafka kafka-console-consumer.sh --topic test-topic --from-beginning --bootstrap-server localhost:9092
kafkacatによるメッセージ送信確認
kafkacatコマンドは、Kafkaのメッセージ送受信を簡潔にテストできます。以下のように使用します:
|
1 2 3 |
echo "test message" | kafkacat -b localhost:9092 -t test-topic -P kafkacat -b localhost:9092 -t test-topic -C |
バージョン管理のポイントとベストプラクティス
KafkaやZooKeeperのバージョンを適切に管理することで、環境不整合やセキュリティリスクを防ぎます。
イメージバージョン固定の重要性
- 不安定なタグ(例:
latest)は避ける:最新版が急激に変更される可能性があるため、具体的なバージョンを指定するべきです。 - 推奨イメージ:
bitnami/kafka:3.8,zookeeper:3.8
Docker ComposeファイルのGit管理方法
- バージョン情報付きのComposeファイルをリポジトリに配置し、変更履歴を可視化します。
- 例:
docker-compose.ymlでバージョン番号を明記し、git diffで過去の差分を確認できます。
ベストプラクティス:Docker Composeファイルはプロジェクトルートに配置し、
.gitignoreで不要なデータ(volumes/,logs/)を除外して管理します。
互換性とバージョン固定の重要性
イメージバージョンの互換性確認
| 項目 | 値 | 補足 |
|---|---|---|
| ZooKeeper | zookeeper:3.8 |
Apache Kafka 3.8との互換性あり |
| Kafka | bitnami/kafka:latest |
現在の最新版(不安定なタグ) |
注意事項:
bitnami/kafka:latestとzookeeper:3.8の組み合わせでは、互換性があるかを公式ドキュメントで確認してください。実環境構築には特定バージョン固定が推奨されます。
まとめと今後の展望
本記事ではDocker ComposeによるKafka環境構築を簡潔に解説しました。冗長性を減らすため、Docker Composeファイルは1箇所のみ記述し、技術的背景やバージョン管理の重要性を明確にしました。
今後のステップ:Kafkaのアーキテクチャやクラスタ構築の詳細については、別記事で解説します。