Att*_*seh 4 azureservicebus azure-eventhub
我正在处理EventHub的高吞吐量应用程序.根据文档,为了从单个发送方实现非常高的吞吐量,需要客户端批处理(不超过每个事件256 KB的限制).
使用Service Bus代理消息传递提高性能的最佳实践建议客户端批处理以实现性能改进.它描述了客户端批处理可用于队列或主题客户端,这使得能够在一段时间内延迟发送消息,然后它在一个批处理中传输消息.
EventHub客户端中是否提供客户端批处理?
ShortAns:EventHubs旨在支持非常高的吞吐量场景 - 客户端批处理是实现这一目标的关键特性之一.API是`EventHubClient.SendBatch(IEnumerable).
长篇故事:
您找到的链接:使用Service Bus代理消息传递提高性能的最佳实践适用于ServiceBus队列和主题 - 它使用称为 - SBMP的Microsoft专有协议 - 并非开放标准.我们在该协议中实现了BatchFlushInterval.这是一段时间(猜测在2010年左右) - Amqp协议尚未标准化.当我们开始构建Azure EventHubs服务时 - Amqp是用于实现高性能消息传递解决方案的新标准协议,因此,我们使用Amqp作为事件中心的一流协议.BatchFlushInterval在EventHubs(Amqp)中没有任何效果.
EventHubClient将需要发送到EventHub的每个原始事件转换为AmqpMessage(请参阅(Amqp协议规范)中的消息部分).
为了做到这一点,根据协议,它为每个消息添加了额外的字节.可以使用属性 - 找到每个序列化EventData(到AmqpMessage)的估计大小.EventData 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标题中 - 这对于批处理中的所有这些消息都是常见的(类似信息partitionKey).这个信息.保证最高为6k.
所以,所有的一切,呼叫者需要保持所有的总大小的轨道EventData中IEnumerable<EventData>,并确保这低于25万.
编辑于09/14/2017
我们添加了EventHubClient.CreateBatchAPI来支持这种情况.
在构建一批EventDatas时,没有更多的猜测工作.Empty EventDataBatch从EventHubClient.CreateBatchAPI 获取,然后使用TryAdd(EventData)api添加事件以构建Batch.
最后,用于EventDataBatch.ToEnumerable()将基础事件传递给EventHubClient.Send()API.
| 归档时间: |
|
| 查看次数: |
1919 次 |
| 最近记录: |