Azure事件中心 - 同一事件中心中有多种事件类型

7
我已经设置了 Azure Event Hub。有2个发布者
  1. 第一个发布者(带发送策略)

  2. 第二个发布者(带发送策略)

第一个发布者将发送事件1,第二个发布者将发送事件2。事件1和事件2的格式都不同。

问题1:这意味着我们在EH中有不同的消息-采用这种方法有什么权衡之处?我是否应该创建2个EH(一个用于发布者1,另一个用于发布者2)?最佳实践和设计哲学是什么?
如果我采用上述方法,我将必须设置一个具有监听策略的消费者来查找这些事件并解析/转换这些事件并对其进行反序列化。 问题2:我需要2个消费者(消费者1和消费者2)读取针对它们的消息吗?(消费者1将仅读取事件1,消费者2将仅读取事件2)?
1个回答

10

场景1:一个事件中心处理多种类型的事件

在这种情况下,发送和处理消息有多种选项:

  1. 只需向事件中心发送消息。编写一个消费进程来读取消息并根据类型进行不同的处理。
  2. 只需向事件中心发送消息。创建不同的消费者组,每种消息类型使用一个消费者组。有两个进程分别读取它们自己的消费者组,并跳过它们没有资格处理的消息。(每个消费者组本质上读取相同的数据,但它们可以位于数据流中的不同位置)。详情请参见 Azure事件中心和多个消费者组
  3. 将消息发送到指定分区。例如,将A类型的消息发送到分区1,将B类型的消息发送到分区2。然而,这可能会影响事件中心的可扩展性。为(一组)分区创建专用进程。然后,每个进程将仅处理同一类型的消息。请参见 https://learn.microsoft.com/en-us/azure/event-hubs/event-hubs-programming-guide#partition-keyhttps://learn.microsoft.com/en-us/azure/event-hubs/event-hubs-programming-guide#create-a-partition-sender

场景2:每种事件类型一个事件中心

这很简单,只需创建2个事件中心和2个消费进程。但是,您将需要管理2个事件中心,并且考虑到事件中心的功能,这可能会过度。

我的建议

根据数据量而定,但基于我的经验,我会将所有消息发送到一个事件中心,并使用一些C#代码读取消息并根据消息类型执行操作。


感谢@peter-bons - 这非常有用 - 你读懂了我的心声:)。如果我们选择方案#1和选项2(_为1个EH创建不同的消费者群组),那么我将不得不跳过许多不适用于消费者群组的消息。这里是否存在任何性能折衷?此外,EH基于吞吐量单位(TU),如果我们选择此选项(或任何选项)会受到什么影响** TU会受到影响**吗? - khar
正确,您需要跳过消费者组中的消息。关于TU,我们正在谈论多少条消息和每条消息的大小?我们每秒钟有数百个事件进入,但仍然只使用1个TU,所以我不会太担心这个问题。现在,我不是EH中TU /计费方面的专家,但对我来说,当您决定选择所选选项时,似乎您既没有获取更多数据也没有输出更多数据。 - Peter Bons
谢谢彼得。我预计每秒约有50个事件,所以不确定哪种方法能在不影响性能和速度的情况下最好地解决问题。 - khar
1
有那么多的资源,你真的不需要担心TU方面的性能问题。1 TU是最小的,已经足够了。请记住,每个TU每秒提供1MB的入站流量和2MB的出站流量。Eventhub被设计用于处理每秒高达一百万个事件。 - Peter Bons

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接