アーキテクチャを変更し、各ストリーミング メッセージが平均 5 回複製されるようになりました。さらに 5 件のメッセージは大量であり、パフォーマンスに影響を与えています。
- 以前は、サード パーティのイベント ハブのキャプチャ BLOB ストレージに直接接続していました (このイベント ハブには 32 のパーティションがありました)。
- これで、サード パーティのイベント ハブに接続された Azure 関数ができました。この azure 関数は、イベント ハブにメッセージをプッシュしています。そして、イベント ハブからのキャプチャを使用しています。イベント ハブには 3 つのパーティションしかありません (パーティション番号については Microsoft の推奨事項に従いました)。
重複とイベント ハブの重複のトピックが広範に議論されていることは承知しています (以下のリンクを参照)。そして、取得している重複の数にまだ戸惑っています。では、各メッセージが平均 5 回複製されると予想されますか?
スループット ユニットは 1 で、自動膨張は 3 です。パーティション数は 3 です。
関数コードは以下のとおりです。
using Microsoft.Azure.EventHubs;
using Microsoft.Azure.WebJobs;
using SendGrid.Helpers.Mail;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
namespace INGESTION
{
public static class InvoiceMasterData
{
[FunctionName("InvoiceMasterData")]
public static async Task Run([EventHubTrigger("InvoiceMasterData", Connection = "SAP_InvoiceMasterData")] EventData[] events,
[EventHub("InvoiceMasterData", Connection = "Azure_InvoiceMasterData")] IAsyncCollector<EventData> outputEvents,
[SendGrid(ApiKey = "AzureSendGridKey")] IAsyncCollector<SendGridMessage> messageCollector, ILogger log)
{
var genericFunctionStopper = new GenericFunctionStopper();
await genericFunctionStopper.Loaddata(outputEvents, "InvoiceMasterData", messageCollector, log, events);
}
}
}
また、共有したい 2 番目の予期しない動作も確認しました (別の質問で尋ねるべきかもしれません)。
以前は、古いアーキテクチャでは、請求書の主キーごとに同じ EnqueuedTimeUtc を使用することはありませんでした。新しいアーキテクチャでは、関数を使用すると、常に発生します。重複排除に EnqueudTimeUtc を使用していたため、これは問題です。どういうわけか、メッセージをバッチで処理しているためですか? パーティション数が少ないからですか?
任意の提案、観察、専門知識をいただければ幸いです。
https://docs.microsoft.com/en-us/azure/azure-functions/functions-reliable-event-processingイベント ハブ トリガーを使用する Azure 関数
が重複メッセージを書き込む
Azure 関数イベント ハブ トリガー バインディング
https://github.com/ Azure/azure-event-hubs-dotnet/issues/358