The English version of quarkus.io is the official project site. Translated sites are community supported on a best-effort basis.

Dev Services for Kafka

Kafka関連のエクステンション(例: quarkus-smallrye-reactive-messaging-kafka )が存在する場合、Dev Services for Kafkaは、開発モードやテストの実行時に自動的にKafkaブローカーを起動します。そのため、ブローカーを手動で起動する必要はありません。アプリケーションは自動的に構成されます。

Kafkaブローカーの起動には時間がかかるため、Dev Services for Kafkaでは、1秒程度で起動するKafka互換ブローカーの Redpandaを使用しています。

Dev Services for Kafkaの有効化/無効化

以下の場合を除き、Dev Services for Kafkaが自動的に有効になります:

  • quarkus.kafka.devservices.enabledfalse に設定されている場合

  • kafka.bootstrap.servers が設定されている場合

  • すべてのReactive Messaging Kafkaチャンネルに bootstrap.servers 属性が設定されている場合

Dev Services for Kafkaでは、ブローカーの起動にDockerを使用しています。お使いの環境でDockerがサポートされていない場合は、ブローカーを手動で起動するか、すでに稼働しているブローカーに接続する必要があります。ブローカーのアドレスは、 kafka.bootstrap.servers を使用して設定できます。

共有ブローカー

通常は、アプリケーション間でブローカーを共有する必要があります。Dev Services for Kafkaは、 dev モードで動作する複数のQuarkusアプリケーションが1つのブローカーを共有するための サービスディスカバリー メカニズムを実装しています。

Dev Services for Kafka は、コンテナを識別するために使用される quarkus-dev-service-kafka のラベルでコンテナを開始します。

複数の(共有)ブローカーが必要な場合は、 quarkus.kafka.devservices.service-name 属性を設定し、ブローカー名を示します。同じ値のコンテナを探し、見つからない場合は新しいコンテナを開始します。デフォルトのサービス名は kafka です。

共有は、dev モードではデフォルトで有効ですが、testモードでは無効です。 quarkus.kafka.devservices.shared=false で共有を無効に設定可能です。

ポートの設定

デフォルトでは、Dev Services for Kafka はランダムなポートを選択してアプリケーションを構成します。ポートは、 quarkus.kafka.devservices.port プロパティを構成することで設定できます。

Kafkaのアドバタイズされたアドレスは、選択したポートで自動的に設定されることに注意してください。

イメージの設定

Dev Services for Kafkaは、 RedpandaStrimziKraft モード)をサポートしています。

RedpandaはKafkaと互換性のあるイベントストリーミングプラットフォームです。 起動時間を高速にするため、Dev Services for Kafka はデフォルトで vectorized/redpanda イメージを使用します。 https://hub.docker.com/r/vectorized/redpanda から任意のバージョンを選択することができます。

Strimziは、Kubernetes上でApache Kafkaを動作させるためのコンテナイメージとOperatorを提供します。StrimziはKubernetesに最適化されていますが、イメージは従来のコンテナ環境でも完全に動作します。Strimziのコンテナイメージは、JVM上で “純正” のKafkaブローカーを動作させますが、起動が遅くなっています。

Strimzi では、Kafka のバージョンが Kraft に対応しているもの(2.8.1 以上)であれば、 https://quay.io/repository/strimzi-test-container/test-container?tab=tags から任意のイメージを選択することができます。

quarkus.kafka.devservices.image-name=quay.io/strimzi-test-container/test-container:0.100.0-kafka-3.1.0

Kafkaトピックの設定

ブローカーの起動時にトピックを作成するように、Dev Services for Kafka を構成することができます。トピックは、指定された数のパーティションと1つのレプリカで作成されます。

次の例では、 test という名前のトピックを3つのパーティションで作成し、 messages という名前の2つ目のトピックを2つのパーティションで作成しています。

quarkus.kafka.devservices.topic-partitions.test=3
quarkus.kafka.devservices.topic-partitions.messages=2

指定された名前のトピックがすでに存在する場合、既存のトピックを異なる数のパーティションに再分割しようとはせず、作成はスキップされます。

quarkus.kafka.devservices.topic-partitions-timeout を使用して、トピック作成時に使用される Kafka admin クライアントコールのタイムアウトを設定できます。デフォルトは 2 秒です。

トランザクションの有効化

デフォルトでは、Red Pandaブローカーは、トランザクションコーディネーターとしては機能しません。トランザクションを有効にするには、次を設定します:

quarkus.kafka.devservices.redpanda.transaction-enabled=true
これは、プロデューサーの冪等性のサポートも有効化します。