【问题标题】:Azure Event Hub - Partitions usecase questionAzure 事件中心 - 分区用例问题
【发布时间】:2021-07-19 18:54:11
【问题描述】:

我是 Azure 事件中心的新手,我很难理解分区。

我有以下场景:

  • 1 事件中心命名空间

  • 1 个实际的事件中心

  • 事件中心的 2 个分区

  • 2 个消费群体

  • 1 个事件制作者

  • 2 个事件消费者,每个消费者组一个

事件生产者向事件中心发送 10 个事件。事件通过循环机制分发到分区。所以事件中心看起来像这样:

Partition 1: [0] [2] [5] [6] [8]
Partition 2: [1] [3] [4] [7] [9]

当事件消费者开始读取时,每个消费者最终只会收到一部分事件,如下所示:

Consumer 1: Gets events 0,2,5,6,8
Consumer 2: Gets events 1,3,4,7,9

Consumer 组是否只能访问 Partition 的子集?

我的假设是事件中心架构支持向多个消费者广播事件。并且每个消费者都想要所有的事件。 但在我看来,事件中心并非旨在让所有消费者都获得所有事件,但我不明白为什么会有用。

谁能帮我理解分区?

【问题讨论】:

    标签: azure azure-eventhub


    【解决方案1】:

    每个事件中心分区都是一个持久的事件流,可供所有消费者使用,无论它们与哪个消费者组相关联。任何消费者都可以在事件流中的任何点从任何分区读取数据。

    分区用于帮助扩展资源以支持更高程度的并发性并增加事件中心的吞吐量。一般来说,正在使用的分区越多,事件中心可以处理的并发操作就越多。更多信息可以在Event Hubs overview找到。

    我的假设是事件中心架构支持向多个消费者广播事件。

    不完全;消费者负责从事件中心的分区中提取事件,它们不会推送给消费者。任何有权限的消费者都可以连接到一个分区并独立读取。事件一旦读取就不会被删除,它们会一直存在于分区中,直到它们的年龄超过保留期。

    但在我看来,事件中心并非旨在让所有消费者都获得所有事件

    这是不正确的。事件中心向任何希望阅读它们的消费者公开事件。使用 Event Hubs SDK 中的 EventProcessorClient 之类的客户端允许应用程序使用所有分区,而无需单独管理每个分区使用者。

    【讨论】:

    • 感谢您的回答。我认为我很困惑,因为 SDK 抽象了“分区使用者”。我可以得出结论,每个消费者组都可以访问所有分区吗?
    • 是的,你可以。从概念上讲,消费者组只不过是消费者的逻辑分组,无论出于何种原因,您的应用程序都希望将它们保持在一起。消费者组没有权限。
    • 对于partition consumer,如果您要从单个分区中读取,EventHubConsumerClient 允许这样做,PartitionReceiver 也是如此。只有事件处理器类型在读取事件时抽象出管理分区。
    猜你喜欢
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 2016-11-16
    • 1970-01-01
    • 1970-01-01
    • 2016-12-26
    • 2019-12-04
    相关资源
    最近更新 更多