Azure 避免从EventHub并行使用相同的事件

Azure 避免从EventHub并行使用相同的事件,azure,kubernetes,event-handling,azure-eventhub,kubernetes-pod,Azure,Kubernetes,Event Handling,Azure Eventhub,Kubernetes Pod,我正在使用: Azure平台运行一些微服务架构软件解决方案 微服务在特殊情况下使用Azure EventHub进行通信 Kubernetes有2个集群(主要、次要) 每个应用程序名称空间中,每个集群运行一个事件侦听器pod,用于从eventhub消费 最后一点与我目前的问题有关: 负载平衡器将在主集群和辅助集群之间共享流量。这意味着每个应用程序同时运行2个事件侦听器吊舱。因此,他们只是对事件做出反应,但有时他们使用来自事件中心的相同事件,这会导致一些重复的通知邮件 所以最后我的问题是:我如

我正在使用:

  • Azure平台运行一些微服务架构软件解决方案
  • 微服务在特殊情况下使用Azure EventHub进行通信
  • Kubernetes有2个集群(主要、次要)
  • 每个应用程序名称空间中,每个集群运行一个事件侦听器pod,用于从eventhub消费

最后一点与我目前的问题有关: 负载平衡器将在主集群和辅助集群之间共享流量。这意味着每个应用程序同时运行2个事件侦听器吊舱。因此,他们只是对事件做出反应,但有时他们使用来自事件中心的相同事件,这会导致一些重复的通知邮件


所以最后我的问题是:我如何避免在同一时间阅读同一事件两次?我认为活动中心指数总是在增加,但在同一时刻开始并不“安全”。

您将需要在每个pod中使用单独的消费者组来进行调整

也就是说,两个pod都将读取相同的事件,因此您有两个选项

  • 进行主动-被动设置。一个消费者组,一个pod,用于读取事件并为每个事件委派工作。如果该pod出现故障,则健康/心跳机制会使第二个pod联机

  • 有一个活动的设置。两个消费群体,两个活跃的豆荚。您将需要实现幂等处理

  • 幂等处理,即多次处理同一消息会产生相同的结果,无论采用何种方法,都是良好的实践。这将允许您重播其中一个发生错误的成批事件,并且不会对数据的完整性产生不利影响

    我会选择第一个选项,一个事件中心阅读器将每秒处理数千个事件,并将工作传递给您的微服务


    如果您的消息量较低,并且需要有保证的消息处理,那么使用Service Bus可能是一个更好的选择,在这里可以锁定、完成和放弃消息。

    听起来很合理-谢谢。我想我需要选择第二种方法,看看我需要调整多少服务。也许我可以构建事件+有效负载的散列并存储它们,以便查看已经消耗了什么或没有消耗什么。您认为这会起作用吗?您将拥有分区id和序列号,可以用于整个中心的唯一性。很好的做法是在邮件中设计一个相关id,使其更直观,并在生产者、消费者和集线器之间具有“粘性”,请记住,您最多只需要将标识符无效存储7天(最大事件集线器保留时间),我已经知道这7天了,但也许其他一些人在这一点上是幸运的。所以非常感谢你的快速回答。