了解Azure事件中心分区的消费者模式

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

Azure Event Hub使用docs中描述的分区使用者模式。在实际场景中,我在理解此模型的消费者方面有一些问题。

所以可以说,我有1000条消息发送到具有四个分区的事件中心,但没有定义任何分区ID。这意味着消息将使用循环方法转到所有分区。

现在,我希望有两个应用程序将消息分发到两个不同的数据库。我的问题是:

  1. 假设对于第一个应用程序,我想将所有消息存储在数据库1中。这意味着,为了达到最大速度,在我的消费者应用程序中,我需要有4个线程(消费者),每个线程都监听事件中心的一个分区,对?他们每个人还必须为正在读取的分区(检查点)存储自己的偏移量。
  2. 让我说第二个应用程序只想过滤消息并将它们的一部分存储在数据库2中。由于不知道哪个消息进入哪个分区,所以我还需要4个使用者,对吧?
  3. 同样对于这两个应用程序,我需要有两个消费者组,但是为什么呢?是否在使用者组中定义了邮件过滤?我真的不明白为什么需要这个,因为应用程序使用者自己存储分区检查点,并且我可以在应用程序内部进行过滤。

我知道有EventProcessorHost类,但我想在较低层次上了解EventHub的概念。

azure bigdata cloud iot azure-eventhub
1个回答
1
投票
  1. 假设对于第一个应用程序,我想将所有消息存储在数据库1中。这意味着,为了达到最大速度,在我的消费者应用程序中,我需要有4个线程(消费者),每个线程都监听事件中心的一个分区,对?他们每个人还必须为正在读取的分区(检查点)存储自己的偏移量。

正确,每个预配置分区都应有一个进程。因此,如果您有4个处理器,则应该有4个进程,每个进程都处理特定分区的消息。如果您使用EventProcessorHost处理消息,它将为您处理各个过程。

  1. 让我说第二个应用程序只想过滤消息并将它们的一部分存储在数据库2中。我还需要4个使用者,因为我不知道哪个消息到达哪个分区,对吗?

您对消费者是什么意思?您还需要另外4个进程来处理消息但是],它们应该配置为使用其他使用者组进行读取。否则,他们将与1的过程竞争

  1. 同样对于这两个应用程序,我需要有两个消费者组,但是为什么呢?是否在使用者组中定义了邮件过滤?我真的不明白为什么需要这个,因为应用程序使用者自己存储分区检查点,并且我可以在应用程序内部进行过滤。

让我们定义一个消费群体:

消费组使多个消费应用程序能够分别查看传入的消息流,并以自己的步调以其自身的偏移量独立读取该流

所以,您需要2个不同的消费群体。每个使用者组都会将所有消息发送到事件中心分区。每个消费者组在消息流中跟踪自己的进度。这就是为什么您的方案需要两个。

假设您定义了一个名为“ App2-Consumer-Group”的附加使用者组,阅读器进程将收到所有消息,但对不感兴趣的消息不采取任何措施。

如果不创建其他使用者组,则默认使用者组的读取器进程将处理第一个应用程序的消息,并使用检查点机制将其标记为已处理。第二个应用程序的阅读器进程将不会收到任何消息,因为它们已被标记为已处理。 (在现实生活中,当使用一个消费者组使用某些消息时,第一个应用程序的读取器进程可能会拾取某些消息,而对于第二个应用程序的读取器进程可能会拾取一些消息,因为这些进程将尝试锁定某个应用程序。特定分区)

我认为这张图片清楚地显示了消费者群体如何跟踪他们在消息流中的进度,因此,如果您对2种不同的应用程序有2种不同的处理逻辑,那么为什么需要拖曳它们:

enter image description here

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