如果使用EventHub.SendAsync(EventData),有没有办法找出写入消息的分区?
Is there a way to find out which partition is the message written if using EventHub.SendAsync(EventData)?
如果使用来自 Azure EventHub 客户端 SDK 的 EventHub.SendAsync(EventData),是否有办法找出写入消息的分区?
我们有意不提供分区键,以便 EventHub 服务可以进行内部负载平衡,但希望找出数据最终写入哪个分区,以诊断端到端数据流的问题。
没有直接的方法。但是有 2 个解决方法。
1.Use Event Hubs Capture 来存储传入的事件,然后在指定的 blob 存储中检查事件。当事件存储在blob存储中时,路径包含分区id,所以你可以知道。
2.Use 代码。新建一个Consumer Group,按照this article to read events. And in this section,有个方法public Task ProcessEventsAsync(PartitionContext context, IEnumerable<EventData> messages)
。您可以使用参数 PartitionContext
来获取事件的分区 ID(通过使用 context.PartitionId
)。
Ivan 的答案在旧版 SDK (Microsoft.Azure.EventHubs
) 的上下文中是正确的,但当前一代 (Azure.Messaging.EventHubs
) 略有不同。您没有提到特定的语言,但从概念上讲,答案在它们之间是相同的。我将使用 .NET 来说明。
如果您在读取事件时不使用需要直接指定分区的调用,那么您将始终可以访问表示从中读取事件的分区的对象。例如,如果您使用 EventHubConsumerClient method ReadEventsAsync to explore, you'll be see the PartitionEvent,其中 Partition
属性 告诉您从中读取 Data
的分区。
当使用 EventProcessorClient, your ProcessEventAsync handler will be invoked with a set of ProcessEventArgs 时,Partition
属性 告诉您 Data
是从哪个分区读取的。
如果使用来自 Azure EventHub 客户端 SDK 的 EventHub.SendAsync(EventData),是否有办法找出写入消息的分区?
我们有意不提供分区键,以便 EventHub 服务可以进行内部负载平衡,但希望找出数据最终写入哪个分区,以诊断端到端数据流的问题。
没有直接的方法。但是有 2 个解决方法。
1.Use Event Hubs Capture 来存储传入的事件,然后在指定的 blob 存储中检查事件。当事件存储在blob存储中时,路径包含分区id,所以你可以知道。
2.Use 代码。新建一个Consumer Group,按照this article to read events. And in this section,有个方法public Task ProcessEventsAsync(PartitionContext context, IEnumerable<EventData> messages)
。您可以使用参数 PartitionContext
来获取事件的分区 ID(通过使用 context.PartitionId
)。
Ivan 的答案在旧版 SDK (Microsoft.Azure.EventHubs
) 的上下文中是正确的,但当前一代 (Azure.Messaging.EventHubs
) 略有不同。您没有提到特定的语言,但从概念上讲,答案在它们之间是相同的。我将使用 .NET 来说明。
如果您在读取事件时不使用需要直接指定分区的调用,那么您将始终可以访问表示从中读取事件的分区的对象。例如,如果您使用 EventHubConsumerClient method ReadEventsAsync to explore, you'll be see the PartitionEvent,其中 Partition
属性 告诉您从中读取 Data
的分区。
当使用 EventProcessorClient, your ProcessEventAsync handler will be invoked with a set of ProcessEventArgs 时,Partition
属性 告诉您 Data
是从哪个分区读取的。