web-dev-qa-db-ja.com

1つのKafka Streamsアプリケーションで複数のクラスターに接続する方法は?

Kafka Streams開発者ガイド には次のように書かれています。

KafkaStreamsアプリケーションはこの構成値で指定された単一のKafkaクラスターとのみ通信できます。Kafka Streamsの将来のバージョンは異なるKafka入力ストリームの読み取りと出力ストリームの書き込み用のクラスター。

これは、アプリケーション全体が単一のKafkaクラスターにのみ接続できること、または KafkaStreams の各インスタンスが単一のクラスターにのみ接続できることを意味しますか?

異なるクラスターに接続する異なるプロパティを持つ複数のKafkaStreamsインスタンスを作成できますか?

12
mixiul__

これは、単一のアプリケーションが1つのクラスターにのみ接続できることを意味します。

  • クラスターAからトピックを読み取り、計算結果をクラスターBに書き込むことはできません。
  • 同じインスタンスを持つ2つの異なるクラスターから2つのトピックを読み取ることはできません。

異なるクラスターに接続する異なるプロパティを持つ複数のKafkaStreamsインスタンスを作成できますか?

そのとおり。ただし、これらの異なるインスタンスは異なるアプリケーションになります。 (「消費者グループ」を考えてください。)

更新:

単一のJVM内で、必要な数のKafkaStreamsインスタンスを作成できます。異なるクラスターに接続するように構成することもできます(同じ処理を実行する場合は、すべてに同じKStreamBuilderを使用できます)。

9
Matthias J. Sax

@ Matthias J. Sax からの優れた回答に追加するだけです。

これは、アプリケーション全体が単一のKafkaクラスターにのみ接続できること、またはKafkaStreamsの各インスタンスが単一のクラスターにのみ接続できることを意味しますか?

ここには2つの質問があると思います。

これは、「アプリケーション全体」の定義によって異なります。つまり、単一のKafkaStreamsインスタンスまたは単一のJVM上の複数のインスタンス、あるいは単一のJVM上の複数のKafkaStreamsインスタンスである可能性があります。ポッドとして実行されるDockerコンテナ。それが何であれ、「私のアプリケーション全体」が少し広すぎて、あまり正確ではないことがわかります。

重要なのは、複数のKafkaクラスター(構成はマップ内のキーと値のペアであるプロパティを介しているため)と通信できるKafkaStreamsインスタンスを作成する方法がないということです。これによってあなたはあなた自身の質問に答えることができました、あなたはできませんでしたか?


2つ以上を使用できないKafka Kafka StreamsアプリケーションでクラスターKafkaストリームとSpark構造化ストリーミング(後者はKafka)と同じ数を使用できます)の違いの1つです。必要に応じてクラスターを作成し、異なるKafkaクラスター)間にパイプラインを構築できます。

4
Jacek Laskowski