避免从 EventHub 并行消费相同的事件
Avoid consuming same events parallel from EventHub
我正在使用:
- Azure 平台到运行一些微服务架构软件解决方案。
- 微服务正在使用 Azure-EventHub 在特殊情况下进行通信。
- Kubernetes 有 2 个集群(主要、次要)
- 每个应用程序命名空间,每个集群有 1 个事件侦听器 pod 运行ning 用于从 eventhub
消费
最后一点与我目前的问题有关:
负载均衡器将在主集群和辅助集群之间共享流量。这意味着每个应用程序同时有 2 个 event-listener-pods 运行ning。所以他们只是对事件做出反应,但有时他们正在使用来自事件中心的相同事件,这会导致一些重复的通知邮件。
所以最后我的问题是:我怎样才能避免同时阅读同一个事件两次?我认为事件中心索引总是在增加,但在同一时刻开始并不“安全”。
您需要为每个 pod 使用单独的消费者组 avoid EPOCH error。
也就是说,pods 都将读取相同的事件,因此您有两个选择。
进行主动-被动设置。一个消费者组,一个读取事件并委托处理每个事件的 pod。如果该 pod 出现故障,则 health/heart 节拍机制会使第二个 pod 联机。
进行主动-主动设置。两个消费组,两个活跃pods。您将需要实现幂等处理。
幂等处理,即多次处理同一条消息产生相同的结果,无论采用何种方法,都是一种很好的做法。这将允许您重播其中一个出错且不会对数据完整性产生不利影响的事件批次。
我会选择第一个选项,单个事件中心 reader 每秒将处理数千个事件并将工作传递给您的微服务。
如果您的消息量较少并且需要保证消息处理,那么使用服务总线可能是更好的选择,因为消息可以被锁定、完成和放弃。
我正在使用:
- Azure 平台到运行一些微服务架构软件解决方案。
- 微服务正在使用 Azure-EventHub 在特殊情况下进行通信。
- Kubernetes 有 2 个集群(主要、次要)
- 每个应用程序命名空间,每个集群有 1 个事件侦听器 pod 运行ning 用于从 eventhub 消费
最后一点与我目前的问题有关: 负载均衡器将在主集群和辅助集群之间共享流量。这意味着每个应用程序同时有 2 个 event-listener-pods 运行ning。所以他们只是对事件做出反应,但有时他们正在使用来自事件中心的相同事件,这会导致一些重复的通知邮件。
所以最后我的问题是:我怎样才能避免同时阅读同一个事件两次?我认为事件中心索引总是在增加,但在同一时刻开始并不“安全”。
您需要为每个 pod 使用单独的消费者组 avoid EPOCH error。
也就是说,pods 都将读取相同的事件,因此您有两个选择。
进行主动-被动设置。一个消费者组,一个读取事件并委托处理每个事件的 pod。如果该 pod 出现故障,则 health/heart 节拍机制会使第二个 pod 联机。
进行主动-主动设置。两个消费组,两个活跃pods。您将需要实现幂等处理。
幂等处理,即多次处理同一条消息产生相同的结果,无论采用何种方法,都是一种很好的做法。这将允许您重播其中一个出错且不会对数据完整性产生不利影响的事件批次。
我会选择第一个选项,单个事件中心 reader 每秒将处理数千个事件并将工作传递给您的微服务。
如果您的消息量较少并且需要保证消息处理,那么使用服务总线可能是更好的选择,因为消息可以被锁定、完成和放弃。