Azure Web アプリケーションを構築しています。アクティビティ ログを Azure Event Hub に送信したいと考えています。アプリケーション ホストとイベント ハブの間の接続が失われるとどうなりますか? イベント ハブ クライアントは何らかのローカル キューを実装していますか?
2 に答える
TLDR:はい。EventHubs は、少なくとも 1 回の配信を提供します。EventHub クライアント SDK によって維持されるキューはありません。スローされ、依存するアプリは送信を再試行する必要があります。
EventHubs サービスは、少なくとも 1 回の配信を保証します。送信呼び出しは、クライアントが EventHubs サービスから「確認」を受信した場合にのみ成功します。EventHubs サービスは、送信した「確認」に対するクライアントの「確認」を待機しません。簡単に言えば、Only-Once/ は提供しません。 1 回限りのセマンティクス。
実装者の視点:
クライアント SDK である EventHubsサービスに慣れている場合は、A メッセージが 2 回送信/配信されていることを知る方法さえありません。これは、現在、A メッセージを識別する方法が組み込まれていないためです(例: EventDataには MessageID のようなものはありません)。そのため、EventHubs サービスが提供できる唯一の保証は、データが eventHub サービスに送信されたとしても、メッセージを永続ストアに永続化した後でのみクライアントに確認応答することです。そのため、少なくとも一度は呼び出されます. 受け取る場合も同様です。レシーバー クライアントがクラッシュした場合、回復後に - 最後に覚えていたオフセットで戻ってきてください - EventHubs サービスは、その正確なポイントからストリームを再生することを保証します。
トレードオフ コール: 「最大 1 回」または「正確に 1 回」などの他のセマンティクスを提供するには – メッセージ レベルのインフラストラクチャ (メッセージごとの識別子と、イベントの重複を排除するためのメッセージごとの計算) –が必要になります。したがって、サービス レベルでこの機能を使用すると便利ですが、パフォーマンスのオーバーヘッドが余分に発生します。
Event Hubs の権限はストリーム セマンティクスを提供することであり、これらは実際にはメッセージごとのセマンティクスであるため、Event Hubs サービスはこれをクライアント ライブラリにプッシュすることを選択しました。クライアント ライブラリは、私たちが提供する Exactly-once セマンティクスに依存してビルドする必要があります。
チッ!スリー