0

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

来自所有 4 位客户的所有数据

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

节点 1:

节点 1

节点 2:

节点 2

节点 3:

节点 3

关于分区键的使用方式,我们是否有误解?从我们在文档中读到的内容来看,当我们不指定分区键时,将使用“循环”方法——但即使使用分区键,它也会以某种方式均匀分布它们。我们是否以某种方式对节点施加了压力——一个蓝色客户拥有大量数据,而另一个客户几乎一无所有?或者发生了什么?

为了可视化我们的理论,我们绘制了以下内容: 可能发生了什么

那么我们是不是用蓝色客户强调顶部节点,最终必须将分区移动到中间节点?

4

2 回答 2

1

当您希望确保将一组事件路由到同一分区但又不想分配显式分区时,应使用分区键。简而言之,使用分区键是控制路由并防止服务跨分区平衡的显式请求。

指定分区键时,它用于生成事件中心服务用于分配事件将路由到的分区的哈希值。每个使用相同分区键的事件都将发布到同一个分区。

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

于 2020-03-10T15:14:35.997 回答
1

Jesse 已经解释了分区键的用途,所以我不会重复。

如果您希望客户到消费者节点的亲和力,您应该考虑为每个客户专用一个独立的 eventthub,以便您可以告诉您的系统类似

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

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

使用分区键并不能真正解决您的业务逻辑。

还有一件事。如果您计划在未来与更多的客户一起运行它,那么您还需要考虑扩展您的设计以在客户和 EH 命名空间之间创建相似性。

于 2020-03-11T03:22:15.540 回答