7

ABという 2 つの Kafka トピックがあるとします。Aからレコードを取得し、各レコードに変換を適用してから、変換されたレコードをBに公開するシステムを開発しようとしています。この場合、変換には HTTP を介した REST エンドポイントの呼び出しが含まれます。

Kafka には比較的慣れていないので、Kafka Streams プロジェクトがこの種の問題 (consume-transform-publish) を既に解決していることを知り、うれしく思いました。残念ながら、Kafka ストリームの変換が操作をブロックしていることを発見しました。私は本能的に、非ブロッキングの非同期方式でHTTP エンドポイントを呼び出そうとします。

これは、この状況では Kafka Streams が機能しないということですか? これは、ブロッキング方式で REST エンドポイントを呼び出す方法に戻さなければならないということですか? これは Kafka Streams の受け入れ可能なパターンでさえありますか? ストリーム ベースのデータ処理は、私にとってまだ比較的新しいものであり、その同時実行モデルについては完全には理解していません。

4

1 に答える 1

4

更新:これをさらに調べた後、これが正しい答えかどうかわかりません...


私は Kafka および Kafka Streams (以降、「Kafka」と呼びます) を初めて使用しますが、同様の質問に遭遇して検討した結果、私の見解は次のとおりです。

Kafka には 2 つの顕著な特徴があります。

  1. すべての並列処理は、トピックの分割によって実現されます
  2. トピックのパーティション内では、処理は一度に 1 つずつ厳密に順序付けられます。

多くの本当に素晴らしいプロパティは、これらの機能から抜け落ちます。たとえば、ストリームベースの「トランザクション」は、最もクールなものの 1 つだと思います。

しかし、これらのプロパティが実際に必要な意味で「機能」であるかどうかは、もちろんアプリケーションによって異なります。トピックのパーティショニングに基づく並列処理で厳密に順序付けされた処理が必要ない場合は、そのアプリケーションに Kafka を使用したくない場合があります。

だから、に関して:

これは、この状況では Kafka Streams が機能しないということですか?

これは機能しますが、パーティション分割を増やすことで並列処理を向上させることができます。

これは、ブロッキング方式で REST エンドポイントを呼び出す方法に戻さなければならないということですか?

はい、そうだと思いますが、なぜそれが「復帰」になるのかわかりません。個人的には、それが Kafka の好きなところです。ブロッキング コードはよりシンプルです。より多くの並列処理が必要な場合は、より多くのスレッドを実行できます。結局、共有された状態はありません。

于 2016-06-17T17:09:52.823 に答える