2016-08-24 10 views
1

私は以下のユースケースを持っています: カフカトピックにプッシュされるログファイル(トピック1と言う)。 そこから読んでjson形式に変換し、別のトピック(トピック2)に書き戻す消費者がいます。 jsonのデータを期待している別の消費者は、トピック2から読み込み、別の変更を行い、別のトピック(トピック3)に書き戻します。カフカでは、1つのカフカトピックを作成し、複数のプロデューサに書き込むことはできますか?

質問は3つのトピックを作成するのではなく、1つのトピックを作成して複数のプロデューサで同じトピックに書き込むことができますか?私の消費者は、どのIDをプロデューサに設定することができないので、どのパーティションを読み込むべきか分かりますか? 私がSOから学んだ1つの解決策は、パーティションを作成して、各プロデューサを特定のパーティションだけに書き込むようにすることです。このアプローチの問題は、プロデューサとコンシューマの数が変更され、トピックの変更が望ましくないことです。ご意見をお聞かせください。

+1

あなたのアプローチには何が間違っていますか?トピック内に異なるメッセージタイプを混在させないことを強くお勧めします。 – TobiSH

+0

@TobiSH現在のアプローチでは、多くのトピックを作成しなければならず、あまりにも多くのトピックを維持することを心配しています。いくつかの時点では、一時的に使用することができます。 – AnswerSeeker

答えて

1

すでにコメントされているように、別の種類のスキーマを単一のトピックにプッシュしないでください。カフカのトピックの数は問題ではありません。いくつかの命名法を使ってそれらを管理することができます。 「topic1」、「topic1_json」、「topic1_modification」のようになります。

あなたのユースケースの場合は、同じ消費者はあなたが先ファイルシステムで同じスキーマイベントのバッチ処理をしたくない&すべてJSONトピックを読むことができる、話題の手に負えないリストを持っています。次に、以下のアプローチに従うことができます。

オブジェクトを汎用スキーマで作成するか、または一部のスキーマレジストリを設定します(チェックconfluent schema registry)。 subRecord ORレコードがスキーマ情報を保持するように、すべてのスキーマが適合する場所。次に、すべてのjsonレスポンスのトピックを作成します(例:topic_json_generic)。 "topic1"からデータを読んだら "topic_json_generic"にプッシュしてください。さらなるトピックについては同様です。消費者レベルでは、どのタイプのオブジェクトで処理が必要かを処理できます。

+0

答えていただきありがとうございます。コンフルエントなスキーマレジストリの場合は+1。私はその解決策を試みます。 – AnswerSeeker

関連する問題