1

イベントソーシングのようなシナリオでApache Kafkaを使いたいです。私は、ログストリームに書き込むときに楽観的な並行性を模倣する方法を探しています。つまり、以前のタイムスタンプTの知識に基づいて作成された新しいログエントリを書き込もうとすると、他の誰かが並行して(タイムスタンプT 'に)ストリームを更新した場合に例外を取得したい私のイベントを書く。現在のタイムスタンプがTの場合、Kafkaログに追加しますか?

Apache Kafkaと楽観的な並行性を実現する方法はありますか?

答えて

0

私はあなたがプロデューサーでこれを並べ替えることを試みるべきではないと思います。それを消費者で並べ替えます。私はT> T(すなわち、T 'はTより遅い)と仮定するが、message(T)の前にmessage(T')が書かれている。

  1. 両方のメッセージが同じキーを与えるか、独自のルーティングを行うか、1つのパーティションだけを使用して終了することを確認してください。
  2. タイムスタンプをメッセージの一部として使用します。
  3. 消費者のメッセージが時間内に戻ってくる。

message(T)は、消費者に到着するとmessage(T')が必要なようにmessage(T)が破棄され、すでに処理され、T < T」されたので、それは、時間に戻って行くだろう。

+0

これは遅すぎるため、最初にエントリをログストリームに書きたくないです。ログ・ストリームは、「発生したイベント」の真の単一のソースでなければなりません。並行性の問題が発生した場合は、プロデューサで失敗してユーザにメッセージを表示したいと考えています。 –

+0

私の回答があなたの質問に他の人が答えるのを妨げるかもしれないと感じたら、それを削除しなければなりませんか?私はカフカの解決策があるかどうかを知ることに興味があります。なぜなら、現在のところ、カフカのプロデューサーがどのように助けてくれるのか想像がつきません。なぜなら、プロデューサーはかなりシンプルでストレートなコードです – Harald

関連する問題