27

私は趣味のプロジェクトとして Kafka 9 を調査しており、「Hello World」タイプの例をいくつか完成させました。

一般的に要求応答メッセージングに基づいて実世界の Kafka アプリケーションについて考えなければなりません。より具体的には、Kafka 要求メッセージをその応答メッセージにリンクする方法を考えなければなりません。

生成された UUID を要求メッセージ キーとして使用し、この要求 UUID を関連する応答メッセージ キーとして使用する方法を考えていました。WebSphere MQ がメッセージ相関 ID を持っているのとほぼ同じタイプのメカニズムです。

私の最後の2つの終了プロセスは次のようになります。

1)。Kafka クライアントはランダムな UUID を生成し、単一の Kafka 要求メッセージを送信します。2)。サーバーは、この要求メッセージの抽出を消費し、要求の UUID 値を保存します 3)。メッセージ ペイロードを使用してビジネス プロセスを完了します。4)。要求メッセージから格納された UUID 値を応答メッセージ キーとして使用する応答メッセージで応答します。5)。Kafka クライアントは、タイムアウトするか、元の要求 UUID 値を持つメッセージを取得するまで、応答トピックをポーリングします。

私が懸念しているのは、Kafka コンシューマーのポーリングが他のクライアントのメッセージを応答トピックから削除し、オフセットを増やして他のクライアントを失敗させることです。

設計されていないユースケースで Kafka を適用しようとしていますか?

Kafka で要求/応答メッセージングを実装することは可能ですか?

4

4 に答える 4

0

理論的には、

  1. 結果メッセージを取得することになっている各リクエストとメッセージに ID を割り当てます。
  2. この ID をパーティションの識別子にマップするハッシュ関数を作成し、
  3. 結果メッセージを送信するときは、同じハッシュ関数を使用して、送信先のパーティションの識別子を取得します。
  4. プロデューサーでは、その特定のパーティションしか観察できませんでした。

これにより、待機中のリクエスト ハンドラが必要とする結果を除外するために、そのトピック内の多くのメッセージをクロールする必要がなくなります。

于 2016-06-26T16:08:07.857 に答える