如何确定事件数据的序列化大小以进行批处理

本文关键字:批处理 序列化 何确定 事件 数据 | 更新日期: 2023-09-27 18:32:56

在 Azure EventHubClient 的文档中,有两种方法可以发送一批数据,每种方法都有下面的备注,如果忽略它,将引发 MessageSizeExceededException。

应确保 eventDataList 的总序列化大小小于一个事件数据传输的大小限制,默认情况下为 256k。

编程指南中也存在类似的警告

如何确定IEnumerable<EventData> eventDataList的序列化大小?

传递给每个事件数据的字节大小很容易确定,假设您不询问事件数据。但是,EventData 的序列化形式大概包括示例中使用的分区键和用户属性。

data.Properties.Add("Type","Telemetry_" + DateTime.Now.ToLongTimeString());

目前,我唯一的选择似乎是对批量大小的保守。

如何确定事件数据的序列化大小以进行批处理

----Nuget 更新后更新----下面是我们在最近的 SDK 迭代中引入的 EventData 属性 - SerializedSizeInBytes - 它解决了这个特定问题 - 在 2.6 以上的所有 sdk nuget 中都可用。

---EventDataBatch实用程序后更新---

使用EventDataBatch.TryAdd(EventData) API 构造批处理。当EventData无法放入批处理中时 - 此 API 将返回false 。停止添加更多事件,然后使用发送方(EventHubClientPartitionSender(发送EventDataBatch

以下考虑促使我们设计EventDataBatch API:

  • 帮助开发人员使用我们的客户端 API - 处理批量EventData的大小
  • 抽象出区域范围/基于 SKU 的MaximumMessageSize配置:世界各地的EventHubs服务可能具有不同的Max EventData大小 - 跨不同的EventHub区域和不同的SKU EventHub。我们希望为开发人员提供一种统一的方式来为任何给定环境构建maximum message size。因此,当使用 API 初始化EventDataBatcheventHubClient.createBatch()客户端与EventHubs Service协商batchSize并返回可以构造正确大小的EventDataBatch实例!

哼!斯里