gpt4 book ai didi

azureservicebus - 如何在发送到 Microsoft Azure EventHubs 时使用客户端事件批处理功能

转载 作者:行者123 更新时间:2023-12-04 23:41:21 25 4
gpt4 key购买 nike

我正在处理 EventHub 的高吞吐量应用程序。根据documentation ,为了从单个发送方实现非常高的吞吐量,则需要客户端批处理(不超过每个事件 256 KB 的限制)。

Best Practices for performance improvements using Service Bus brokered messaging建议客户端批处理以实现性能改进。它描述了客户端批处理可用于队列或主题客户端,它可以将消息的发送延迟一段时间,然后以单个批处理的形式传输消息。

EventHub 客户端中是否提供客户端批处理?

最佳答案

简答 :EventHubs 旨在支持非常高的吞吐量场景 - 客户端批处理是实现此功能的关键功能之一。 API 为 `EventHubClient.SendBatch(IEnumerable) .

长话短说 :

您找到的链接:Best Practices for performance improvements using Service Bus brokered messaging适用于 ServiceBus 队列和主题 - 它使用 Microsoft 专有协议(protocol) - SBMP - 并且不是开放标准。我们在该协议(protocol)中实现了 BatchFlushInterval。这是很久以前的事了(猜测大约在 2010 年左右) - 其中 Amqp协议(protocol)还没有标准化。当我们开始构建 Azure EventHubs 服务时 - Amqp是用于实现高性能消息传递解决方案的新标准协议(protocol),因此,我们使用了 Amqp作为我们用于事件中心的一流协议(protocol)。 BatchFlushInterval 在 EventHubs ( Amqp ) 中没有任何影响。
EventHubClient将您需要发送到 EventHub 的每个原始事件转换为 AmqpMessage(请参阅 (Amqp Protocol Specification) 中的消息传递部分。
为了做到这一点,根据协议(protocol),它为每条消息添加了一些额外的字节。可以使用属性 - EventData 找到每个 Serialized EventData(到 AmqpMessage)的估计大小 SerializedSizeInBytes .

有了这个背景,来到你的场景:实现非常高的吞吐量的最佳方法是使用 EventHubClient.SendBatch(IEnumerable<EventData>) api。此 Api 的合约是 - 在调用 SendBatch 之前- 调用者需要确保这批消息的序列化大小不超过 256k。在内部,此 API 将 IEnumerable<EventData>到 1 个单一的 AmqpMessage 并发送到 EventHub 服务。截至 2016 年 4 月 25 日,EventHubs 服务对 1 个 AmqpMessage 施加的限制为 256k。另外,还有一个细节 - 当列表 EventData被转换为单个 AmqpMessage - EventHubClient需要将一些信息提升到 BatchMessage header 中 - 这对于批处理中的所有这些消息都是常见的(信息如 partitionKey )。这个信息。保证最大为6k。

所以,总而言之,调用者需要跟踪所有 EventData 的总大小在 IEnumerable<EventData>并确保低于 250k .

编辑于 2017 年 9 月 14 日

我们添加了 EventHubClient.CreateBatch 支持这种情况的 API。

构建 EventData 的批处理不再需要猜测工作。 s。获取 Empty EventDataBatch来自 EventHubClient.CreateBatch API 然后使用 TryAdd(EventData) api 添加事件以构造批处理。

最后使用 EventDataBatch.ToEnumerable()让底层事件传递给 EventHubClient.Send() API。

more on Event Hubs...

关于azureservicebus - 如何在发送到 Microsoft Azure EventHubs 时使用客户端事件批处理功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36720702/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com