今日のマイクロサービスおよびイベント駆動アーキテクチャにおいて、Apache Kafkaはストリーミングアプリケーションの事実上の標準です。しかし、Spring Bootアプリケーションと組み合わせてローカル開発のためにKafkaを設定するのは難しい場合があります。特に、ローカルで実行するための設定が必要な場合です。
Spring Bootアプリケーションは、spring-kafka Mavenパッケージを通じてKafka統合をサポートしています。spring-kafkaを使用するには、Kafkaインスタンスに接続する必要があります。通常、開発中はローカルのKafkaインスタンスを実行し、それに対してビルドを行います。しかし、Docker Desktopとコンテナを使用すると、ローカルのKafkaインスタンスを実行するよりも、はるかに簡単にセットアップできます。この記事では、Spring Bootアプリケーションと一緒にローカルKafkaコンテナを設定する手順を案内します。
前提条件
- Docker Desktopをセットアップする必要があります。これを行うには、こちらの記事を参照できます。
- spring-kafkaパッケージが構成されたSpring Bootアプリケーション。
Kafkaコンテナの実行
Kafkaコンテナを実行するために、まず以下のdocker-composeファイルを使用します:
version'3'
services
zookeeper
image confluentinc/cp-zookeeper latest
environment
ZOOKEEPER_CLIENT_PORT2181
ports
"2181:2181"
kafka
image confluentinc/cp-kafka latest
environment
KAFKA_ZOOKEEPER_CONNECT zookeeper2181
KAFKA_ADVERTISED_LISTENERS PLAINTEXT //localhost9092
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR1
ports
"9092:9092"
depends_on
zookeeper
このdocker-composeファイルには、Kafkaコンテナとその依存関係であるZookeeperコンテナをプルするための設定が含まれています。Zookeeperはクラスター内のKafkaブローカーノードを管理します。これに関する詳細はこの 記事 で確認できます。
コンテナをDocker Desktopに登録するために、以下のコマンドを使用します:
docker-compose up -d
これにより、必要なイメージがプルされ、コンテナが起動します。コンテナが起動すると、Docker Desktopで以下のようにコンテナを見ることができます:
Kafkaコンテナが起動したので、次にDocker Desktopコンソールを使用して、以下のコマンドで必要なトピックを作成できます:
kafka-topics --create --topic user-notification --partitions 1 --replication-factor 1 --bootstrap-server localhost:9092
コンテナが起動し、必要な前提条件が実行されたので、Spring Bootアプリケーションを起動できます。Spring Bootアプリケーションのために、Kafkaのブートストラップアドレスを以下のように設定します:
kafka.bootstrapAddress=localhost:9092
Spring Bootアプリケーションを起動すると、Kafkaとの接続に関するログが表示されるはずです。これは、Spring Bootアプリケーションのタイプによって、プロデューサーかコンシューマーかに依存します。
記事に記載されている手順に従って、KafkaコンテナとSpring Bootアプリケーションを使用してローカル開発環境をセットアップしました。
Source:
https://dzone.com/articles/setting-up-local-kafka-container-for-spring-boot-application