如何确定事件数据的序列化大小以进行批处理
本文关键字:批处理 序列化 何确定 事件 数据 | 更新日期: 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
。停止添加更多事件,然后使用发送方(EventHubClient
或PartitionSender
(发送EventDataBatch
。
以下考虑促使我们设计EventDataBatch
API:
- 帮助开发人员使用我们的客户端 API - 处理批量
EventData
的大小 - 抽象出区域范围/基于 SKU 的
MaximumMessageSize
配置:世界各地的EventHubs
服务可能具有不同的Max EventData
大小 - 跨不同的EventHub
区域和不同的SKU
EventHub
。我们希望为开发人员提供一种统一的方式来为任何给定环境构建maximum message size
。因此,当使用 API 初始化EventDataBatch
时eventHubClient.createBatch()
客户端与EventHubs Service
协商batchSize
并返回可以构造正确大小的EventDataBatch
实例!
哼!斯里