Cloud DataFlow と PubSub を使用するときに冪等性を確保する最善の方法に興味がありますか?
現在、MySQL データベースでレコードを処理および保存するシステムがあります。レポートの一部に DataFlow を使用することに興味がありますが、同じメッセージを誤って二重にカウントしないようにするために何をする必要があるかを理解したいと思っていました。
私の混乱は 2 つの部分で発生します。1 つは、メッセージを 1 回だけ送信するようにすること、もう 1 つはメッセージを 1 回だけ処理するようにすることです。
私の腸は次のようになります。
関心のあるイベントが MySQL データベースに記録されるたびに、それを PubSub メッセージに変換して PubSub に公開します。成功したと仮定して、MySQL レコードと一緒に返された PubSub id を記録します。そうすれば、PubSub ID があれば、送信したことがわかり、再度送信する必要はありません。PubSub への公開が失敗した場合は、もう一度送信する必要があることがわかります。すべて良い。
しかし、PubSub の書き込みが成功した後に MySQL への書き込みが失敗した場合、同じメッセージを pub sub に再度パブリッシュすることになる可能性があるため、DataFlow 側で、このケースと PubSub がメッセージを 2 回送信するケースの両方を処理する必要があります ( https://cloud.google.com/pubsub/subscriber#guaranteesごと)。
これを処理する最良の方法は何ですか? AppEngine またはその他のシステムでは、データストアをチェックして、作成中の新しいレコードが存在するかどうかを確認しますが、DataFlow でそれを行う方法がわかりません。メッセージが 2 回処理されるのを防ぐフィルターを簡単に実装する方法はありますか? それとも、DataFlow はすでにこれを処理していますか?