Azure Eventhub /事件处理器主机:分区未按预期工作

问题描述 投票:0回答:2

我们正在研究一个项目,该项目实现并使用Azure Eventhub。我们使用事件处理器主机来处理来自Eventhub的数据。我们有32个分区分配到3个节点上,并且想知道事件处理器主机如何将分区分配并平衡到接收者/节点上,尤其是在使用分区键时。

All data from all 4 customers

我们目前有4个不同的客户(蓝色,橙色,紫色和浅蓝色),向我们发送不同大小的数据。如您所见,左边的蓝色客户发送了大约。 132k数据串,而右侧的浅蓝色客户仅发送28。我们的理论是,给定一个基于客户的分区键(颜色标识),我们将看到客户数据仅放置在一个节点中。相反,我们可以看到数据以某种方式均匀地分布在3个节点上,如下所示:

节点1:

Node 1

节点2:

Node 2

节点3:

Node 3

关于分区键的使用方式,我们是否有误解?根据我们在文档中阅读的内容,然后当我们不指定分区键时,将使用“循环”方法-但是即使使用分区键,它也会以某种方式均匀地分配它们。我们是否在以某种方式对节点施加压力-一个蓝色的客户拥有大量数据,另一个客户几乎没有东西?还是发生了什么?

为了形象化我们的理论,我们绘制了以下内容:Possibly what is happening

因此,我们是否要向拥有最大客户的蓝色节点强调,最后必须将分区移动到中间节点?

azure partitioning azure-eventhub event-processor-host
2个回答
0
投票

分区键用于当您要确保将一组事件路由到同一分区,但又不想分配显式分区时使用。简而言之,使用分区键是控制路由的明确请求,并阻止服务在各个分区之间保持平衡。

当您指定分区键时,它用于产生一个哈希值,Event Hubs服务将其用于分配将事件路由到的分区。使用相同分区键的每个事件都将发布到同一分区。

为了在发布时允许服务循环,您不能指定分区键或显式分区标识符。


0
投票

Jesse已经解释了分区键有什么用,所以我不再重复。

如果您希望客户与消费者-节点之间的亲和力,则应考虑为每个客户分配一个独立的事件中心,以便您可以将类似的内容告诉系统

  1. node-1仅通过使用来自eventhub-1的事件来处理来自customerA的数据]

  2. node-2仅通过使用来自eventhub-2的事件来处理来自customerB的数据等等...

  3. 使用分区键并没有真正解决您的业务逻辑。

© www.soinside.com 2019 - 2024. All rights reserved.