Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure Eventhub/事件处理器主机:分区未按预期工作_Azure_Partitioning_Azure Eventhub_Event Processor Host - Fatal编程技术网

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

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(颜色标识),我们将看

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

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

节点1:

节点2:

节点3:

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

为了将我们的理论形象化,我们绘制了以下内容:


因此,我们是否强调了蓝色客户的顶部节点,即最终必须将分区移动到中间节点?

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

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


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

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

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


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

Jesse已经解释了分区键的用途,因此我不再重复

如果你想要客户到客户节点的亲和性,你应该考虑将独立的EvEnub奉献给每个客户,这样你就可以告诉你的系统类似于

  • 节点1仅通过使用eventhub-1中的事件来处理来自customerA的数据

  • 节点2仅通过使用eventhub-2中的事件来处理来自customerB的数据 等等

  • 在这里,使用分区键并不能真正解决您的业务逻辑问题


    还有一件事。如果您计划在未来以更大数量的客户来运行,那么您也需要考虑扩展您的设计来创建客户和EH命名空间之间的亲和力。

    < P>杰西已经解释了分区键是什么,所以我不会重复它。

    如果你想要客户到客户节点的亲和性,你应该考虑将独立的EvEnub奉献给每个客户,这样你就可以告诉你的系统类似于

  • 节点1仅通过使用eventhub-1中的事件来处理来自customerA的数据

  • 节点2仅通过使用eventhub-2中的事件来处理来自customerB的数据 等等

  • 在这里,使用分区键并不能真正解决您的业务逻辑问题


    还有一件事。如果您计划在未来以更大数量的客户来运行,那么您也需要考虑扩展您的设计来创建客户和EH命名空间之间的亲和力。运行事件处理器主机的进程?您可能混淆了两件事:事件中心处理器使用Azure Blob存储租约在不同处理器实例之间分配和分发分区(我假设您称之为节点)。分区键在这方面没有任何作用。你对节点是什么意思?运行事件处理器主机的进程?您可能混淆了两件事:事件中心处理器使用Azure Blob存储租约在不同处理器实例之间分配和分发分区(我假设您称之为节点)。分区键在这一方面没有任何作用。所以这不是我正在尝试做的,而且没有发生吗?我添加了一个基于CustomerId的partitionkey,我认为这意味着属于CustomerId_blue的所有数据都应该走一条路线,而属于CustomerId_green的所有数据都应该走另一条路线。相反,有些蓝色会走一条路线,有些会走另一条路线,而我最终会在每条路线上混淆3个不同的CustomerId。还是我误解了什么?这不是循环赛的意思/作用吗?均衡地平衡数据,而不关心它是定制的蓝色还是绿色?Serkant已经提供了关于一般场景的想法,因此我将避免重复该指导。我想说的是,我相信您的核心假设“使用分区键将