将大于 256KB 的事件推送到 Azure EventHub

kha*_*har 5 azure azureservicebus azure-eventhub

我正在使用Azure 事件中心。我计划发送事件并使用SendBatchAsync。我看到事件中心的限制为256KB (无论是单独发送还是批量发送)

那么,如果我的数据 > 256KB ,处理此问题的最佳实践是什么?我们是否应该单独发送消息(这将保证消息小于 256KB)?

另外,如何将事件拆分为 256KB 块并将其发送到事件中心?我查看了 Azure 文档,发现他们建议使用EventHubClient.CreateBatch,但我没有看到足够的示例。有人可以提供一些模型或示例或步骤,以了解我们如何最终拆分为 256KB 和 SendBatchAsync

这是我所做的(但不考虑 256KB 限制)

await myEventHubClient.SendBatchAsync(
    events.Select( 
        iEvent =>
            new EventData(
                Encoding.UTF8.GetBytes(JsonConvert.SerializeObject( iEvent ) ) ) ) );
Run Code Online (Sandbox Code Playgroud)

Mur*_*oft 5

不要尝试跨多个消息对单个有效负载进行分块,考虑到事件不能保证按顺序到达,可能最终会出现在不同的分区中,并且可能会相隔一段时间到达并且可以被删除,因此跟踪和重构会变得极其困难独立于“总线”。从规模上看,这变得更具挑战性。

选项 1:如果您的有效负载是 text / json 并且您的消息大小不大于 256kb,请考虑压缩有效负载。您可以通过这个在线工具了解尺寸结果。如果您的有效负载中有大量空格(例如 JSON),您也可以缩小而不是压缩。

选项 2:将有效负载存储在外部存储中(例如 DocumentDB 或 Blob 存储)。

在事件中发送对您的有效负载的引用。这可以使您的事件保持精简,但您的消费者需要了解如何检索有效负载。一种简单的方法是将有效负载的链接呈现为 URI,显然您可能需要考虑根据事件中心访问策略对有效负载存储进行身份验证和授权,以保持其流畅。