Apache Flume - 多个消费者从单个消息队列中获取数据

Apache Flume - Ingesting data from single message queue by multiple consumers

我目前正在开发 Apache Flume 代理,它可以从单个消息队列 (Solace) 获取数据。由于消息处理速度因大小而变慢,并且要摄取大量消息,我正在考虑让多个代理来使用它们。然而,挑战在于多个代理可能会接收相同的消息,从而导致接收器(着陆桶)中出现重复消息。当一个代理正在处理消息(未确认)时,如果另一个代理从队列中获取消息,则可能会发生这种情况。如果您有类似的经验和想法来解决这个问题,请分享。谢谢

您可以使用非独占队列以循环方式在多个代理(消费者)之间分发消息。

不会有任何重复,除非存在一些潜在的错误(例如其中一个消费者断开连接),导致 Solace 消息代理将已发送但未确认的消息重新发送给另一个消费者。

在这种情况下,JMS 消息将被标记为重新传送,您的应用程序必须执行一些逻辑来处理这个可能重复的消息。


虽然不是绝对必要的,但考虑处理应用程序无法成功处理的 "poison" 消息可能也是一个好主意,并且可能会导致 redeliver-fail,redeliver-fail,redeliver-失败循环。

您可以通过确保您的消息符合死消息队列条件、配置死消息队列并调整队列上的 "Max Redelivery" 设置来实现此目的。

这将确保 "poison" 条消息最终会被移动到死消息队列,而不是不断地重新传送到您的应用程序。