Dockerを使用してApacheKafkaをセットアップするためのガイド
1. 概要
Dockerは、ソフトウェア業界でアプリケーションの作成、パッケージ化、および展開に使用される最も人気のあるコンテナエンジンの1つです。
このチュートリアルでは、Dockerを使用して Apache KafkaKafkaセットアップを行う方法を学習します。
2. シングルノードセットアップ
シングルノードKafkaブローカーのセットアップは、ローカル開発のニーズのほとんどを満たすので、この簡単なセットアップを学ぶことから始めましょう。
2.1. docker-compose.yml構成
Apache Kafka Kafkaサーバーを起動するには、最初にZookeeperサーバーを起動する必要があります。
この依存関係をdocker-compose.ymlファイルで構成できます。これにより、Zookeeperサーバーは常にKafkaサーバーの前で起動し、その後で停止します。
zookeeperとkafkaの2つのサービスを使用して、単純なdocker-compose.ymlファイルを作成しましょう。
version: '2'
services:
zookeeper:
image: confluentinc/cp-zookeeper:latest
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
ports:
- 22181:2181
kafka:
image: confluentinc/cp-kafka:latest
depends_on:
- zookeeper
ports:
- 29092:29092
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092,PLAINTEXT_HOST://localhost:29092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
このセットアップでは、Zookeeperサーバーはport = 2181 で、同じコンテナーセットアップ内で定義されているkafkaサービスをリッスンしています。 ただし、ホストで実行されているクライアントの場合、ポート22181で公開されます。
同様に、kafkaサービスはポート29092を介してホストアプリケーションに公開されますが、実際には、KAFKA_ADVERTISED_LISTENERSプロパティによって構成されたコンテナ環境内のポート9092でアドバタイズされます。 。
2.2. Kafkaサーバーを起動します
docker-compose コマンドを使用してコンテナーを起動し、Kafkaサーバーを起動しましょう。
$ docker-compose up -d
Creating network "kafka_default" with the default driver
Creating kafka_zookeeper_1 ... done
Creating kafka_kafka_1 ... done
次に、 ncコマンドを使用して、両方のサーバーがそれぞれのポートでリッスンしていることを確認しましょう。
$ nc -z localhost 22181
Connection to localhost port 22181 [tcp/*] succeeded!
$ nc -z localhost 29092
Connection to localhost port 29092 [tcp/*] succeeded!
さらに、コンテナの起動中に詳細ログをチェックして、Kafkaサーバーが起動していることを確認することもできます。
$ docker-compose logs kafka | grep -i started
kafka_1 | [2021-04-10 22:57:40,413] DEBUG [ReplicaStateMachine controllerId=1] Started replica state machine with initial state -> HashMap() (kafka.controller.ZkReplicaStateMachine)
kafka_1 | [2021-04-10 22:57:40,418] DEBUG [PartitionStateMachine controllerId=1] Started partition state machine with initial state -> HashMap() (kafka.controller.ZkPartitionStateMachine)
kafka_1 | [2021-04-10 22:57:40,447] INFO [SocketServer brokerId=1] Started data-plane acceptor and processor(s) for endpoint : ListenerName(PLAINTEXT) (kafka.network.SocketServer)
kafka_1 | [2021-04-10 22:57:40,448] INFO [SocketServer brokerId=1] Started socket server acceptors and processors (kafka.network.SocketServer)
kafka_1 | [2021-04-10 22:57:40,458] INFO [KafkaServer id=1] started (kafka.server.KafkaServer)
これで、Kafkaセットアップを使用する準備が整いました。
2.3. Kafkaツールを使用した接続
最後に、 KafkaツールGUIユーティリティを使用して、新しく作成したKafkaサーバーとの接続を確立します。後で、この設定を視覚化します。
ホストマシンのポート29092でリッスンしているKafkaサーバーに接続するには、Bootstrapserversプロパティを使用する必要があることに注意する必要があります。
最後に、左側のサイドバーで接続を視覚化できるはずです。
そのため、TopicsとConsumersのエントリは、新しい設定であるため空です。 トピックが作成されると、パーティション間でデータを視覚化できるようになります。 さらに、Kafkaサーバーに接続しているアクティブなコンシューマーがいる場合は、それらの詳細も表示できます。
3. Kafkaクラスターのセットアップ
より安定した環境を実現するには、回復力のあるセットアップが必要です。 docker-compose.ymlファイルを拡張して、マルチノードKafkaクラスターセットアップを作成しましょう。
3.1. docker-compose.yml構成
Apache Kafkaのクラスター設定には、ZookeeperサーバーとKafkaサーバーの両方に冗長性が必要です。
それでは、ZookeeperサービスとKafkaサービス用にそれぞれもう1つのノードの構成を追加しましょう。
---
version: '2'
services:
zookeeper-1:
image: confluentinc/cp-zookeeper:latest
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
ports:
- 22181:2181
zookeeper-2:
image: confluentinc/cp-zookeeper:latest
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
ports:
- 32181:2181
kafka-1:
image: confluentinc/cp-kafka:latest
depends_on:
- zookeeper-1
- zookeeper-2
ports:
- 29092:29092
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: zookeeper-1:2181,zookeeper-2:2181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka-1:9092,PLAINTEXT_HOST://localhost:29092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
kafka-2:
image: confluentinc/cp-kafka:latest
depends_on:
- zookeeper-1
- zookeeper-2
ports:
- 39092:39092
environment:
KAFKA_BROKER_ID: 2
KAFKA_ZOOKEEPER_CONNECT: zookeeper-1:2181,zookeeper-2:2181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka-2:9092,PLAINTEXT_HOST://localhost:39092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
サービス名とKAFKA_BROKER_IDがサービス全体で一意であることを確認する必要があります。
さらに、各サービスはホストマシンに一意のポートを公開する必要があります。 zookeeper-1およびzookeeper-2はポート2181でリッスンしていますが]、それぞれポート22181と32181を介してホストに公開しています。 同じロジックがkafka-1およびkafka-2 サービスにも適用され、ポート29092およびでリッスンします。それぞれ39092。
3.2. Kafkaクラスターを開始します
docker-compose コマンドを使用して、クラスターを起動してみましょう。
$ docker-compose up -d
Creating network "kafka_default" with the default driver
Creating kafka_zookeeper-1_1 ... done
Creating kafka_zookeeper-2_1 ... done
Creating kafka_kafka-2_1 ... done
Creating kafka_kafka-1_1 ... done
クラスタが起動したら、Kafkaツールを使用して、Kafkaサーバーとそれぞれのポートにカンマ区切りの値を指定してクラスタに接続しましょう。
最後に、クラスターで使用可能な複数のブローカーノードを見てみましょう。
4. 結論
この記事では、
また、Kafkaツールを使用して、構成されたブローカーサーバーの詳細を接続して視覚化しました。