バックグラウンド:
以前は、インデックス作成にhibernate search、Lucene、jboss hornetqキューを使用していました。
このアプリケーションはプロデューサーであり、メタデータ(データベース内のレコードを識別するための一意のデータ情報)をhornetqに送信します。 コンシューマはこのメタデータを受信し、データベースに対してクエリを実行して、完全なレコードの詳細(子オブジェクトを含む)を取得します。 これは、はるかにデータベース中心のアプローチです。
ここで、インデックス作成のためのデータベース中心のアプローチを排除したいと思います。 hornetqではなくkafkaを使用することにしました。
ユーザーがデータを作成するときに問題はありません。
ユーザーがデータを編集するときに、潜在的な問題があることがわかります(2つの子オブジェクトを持つ親エンティティを言う)。ユーザーが表示するためにデータベースからデータが取得されると、
同じデータをkafka topic1にプッシュします。ユーザーがデータ(parenetレベルのデータなど)を変更して送信するとき。親レベルのデータのみを取得し(子オブジェクトのデータは取得しない)、変更したデータをtopic2にプッシュします。次に、topic1(子オブジェクト)に存在するメッセージを、topic2(親レベルデータ)の対応するメッセージとマージする必要があります
注:インデックス作成には更新がなく、削除してから挿入することがわかっているため、このルートを使用する必要があります。
質問:
上記のアプローチを使用すると、特定の topic1にあるメッセージとtopic2にある特定のメッセージ。は topic1とtopic2で同じメッセージIDを提供する方法はありますか?
単一のトピックを使用する場合、この問題を解決する方法はありますか?
上記の問題を解決するためのより良い設計/アプローチはありますか?
前もって感謝します。
関連記事
- 返された要素ごとに2つの異なるAPIエンドポイントからのデータをマージする方法は?
- 列にすでにグループ化されている別のデータフレームをマージする
- 2つの異なる構造体をマージする
- Pythonで2つの異なる配列の最初の要素を1つの配列にマージします
- 同じであるが順序が異なる列、または別の列内の列を識別する方法は?
- 異なる列の一致するキーを使用したデータフレームの左マージ
- 異なる長さのベクトルを動的行列にマージします
- 数値変数、つまり温度に応じて異なるprint()メッセージを表示しようとしています
- パンダ:異なるデータフレームをマージする方法は?
- Pythonで長さの異なる2つのデータセットをマージするにはどうすればよいですか?
同じKafkaクラスター内のトピック間で特定のメッセージをマッピングまたは結合するには、Kafka StreamとKSQLを使用することをお勧めします。ここで参照を見つけることができます。
オブジェクトを一意にするには多くの方法があり、topic1およびtopic2にメッセージを送信するときに親エンティティIDを使用することをお勧めします。次のサンプルJavaコード:
データベースに新しいテーブル(A)を作成して、インデックス作成のために送信されるメッセージ全体を保存できます。ユーザーがデータを作成または更新するたびに、メッセージもテーブルAに挿入/更新されます。最後に、KafkaクライアントはメッセージオブジェクトをテーブルAから取得し、Kafkaクラスターの一意のトピックを生成します。
上で述べたように、Kafka StreamとKSQLを試してみてください。