Azure Eventhub/事件处理器主机:分区未按预期工作
我们现在正在进行一个项目,该项目实现并使用Azure Eventhub。 我们使用事件处理器主机来处理来自Eventhub的数据。我们有32个分区分布在3个节点上,我们想知道事件处理器主机如何将这些分区分配和平衡到接收器/节点上——特别是在使用分区键时 我们目前有4个不同的客户(蓝色、橙色、紫色和浅蓝色),他们向我们发送不同大小的数据。如您所见,左侧的蓝色客户发送约132k个数据字符串,而右侧的浅蓝色客户仅发送28个。 我们的理论是,给定基于客户的partitionkey(颜色标识),我们将看到客户数据将只放在一个节点中。 相反,我们可以看到数据以某种方式均匀分布在3个节点上,如下所示: 节点1: 节点2: 节点3: 关于如何使用partitionkey,我们是否有误解?从我们在文档中读到的内容来看,当我们不指定分区键时,将使用“循环”方法——但即使使用分区键,它也会以某种方式均匀地分布它们。 我们是否在强调节点——一个蓝色客户拥有大量数据,而另一个客户几乎什么都没有?或者发生了什么 为了将我们的理论形象化,我们绘制了以下内容:Azure Eventhub/事件处理器主机:分区未按预期工作,azure,partitioning,azure-eventhub,event-processor-host,Azure,Partitioning,Azure Eventhub,Event Processor Host,我们现在正在进行一个项目,该项目实现并使用Azure Eventhub。 我们使用事件处理器主机来处理来自Eventhub的数据。我们有32个分区分布在3个节点上,我们想知道事件处理器主机如何将这些分区分配和平衡到接收器/节点上——特别是在使用分区键时 我们目前有4个不同的客户(蓝色、橙色、紫色和浅蓝色),他们向我们发送不同大小的数据。如您所见,左侧的蓝色客户发送约132k个数据字符串,而右侧的浅蓝色客户仅发送28个。 我们的理论是,给定基于客户的partitionkey(颜色标识),我们将看
因此,我们是否强调了蓝色客户的顶部节点,即最终必须将分区移动到中间节点?当您希望确保将一组事件路由到同一分区,但不希望分配显式分区时,可以使用分区键。简言之,使用分区键是控制路由的显式请求,并防止服务在分区之间平衡 指定分区键时,它用于生成哈希值,事件中心服务使用该哈希值分配事件将路由到的分区。使用同一分区键的每个事件都将发布到同一分区
要允许服务在发布时循环,您不能指定分区键或显式分区标识符。当您希望确保一组事件路由到同一分区,但不希望分配显式分区时,可以使用分区键。简言之,使用分区键是控制路由的显式请求,并防止服务在分区之间平衡 指定分区键时,它用于生成哈希值,事件中心服务使用该哈希值分配事件将路由到的分区。使用同一分区键的每个事件都将发布到同一分区
要允许服务在发布时进行循环,您不能指定分区键或显式分区标识符。Jesse已经解释了分区键的用途,因此我不再重复
如果你想要客户到客户节点的亲和性,你应该考虑将独立的EvEnub奉献给每个客户,这样你就可以告诉你的系统类似于
还有一件事。如果您计划在未来以更大数量的客户来运行,那么您也需要考虑扩展您的设计来创建客户和EH命名空间之间的亲和力。 < P>杰西已经解释了分区键是什么,所以我不会重复它。
如果你想要客户到客户节点的亲和性,你应该考虑将独立的EvEnub奉献给每个客户,这样你就可以告诉你的系统类似于
还有一件事。如果您计划在未来以更大数量的客户来运行,那么您也需要考虑扩展您的设计来创建客户和EH命名空间之间的亲和力。运行事件处理器主机的进程?您可能混淆了两件事:事件中心处理器使用Azure Blob存储租约在不同处理器实例之间分配和分发分区(我假设您称之为节点)。分区键在这方面没有任何作用。你对节点是什么意思?运行事件处理器主机的进程?您可能混淆了两件事:事件中心处理器使用Azure Blob存储租约在不同处理器实例之间分配和分发分区(我假设您称之为节点)。分区键在这一方面没有任何作用。所以这不是我正在尝试做的,而且没有发生吗?我添加了一个基于CustomerId的partitionkey,我认为这意味着属于CustomerId_blue的所有数据都应该走一条路线,而属于CustomerId_green的所有数据都应该走另一条路线。相反,有些蓝色会走一条路线,有些会走另一条路线,而我最终会在每条路线上混淆3个不同的CustomerId。还是我误解了什么?这不是循环赛的意思/作用吗?均衡地平衡数据,而不关心它是定制的蓝色还是绿色?Serkant已经提供了关于一般场景的想法,因此我将避免重复该指导。我想说的是,我相信您的核心假设“使用分区键将