我们有一个 Kafka 队列,有两个消费者,都从同一个分区读取(扇出场景)。其中一个消费者应该是金丝雀并处理 1% 的消息,而另一个处理剩下的 99% 的消息。
这个想法是基于消息的属性做出决定,例如消息 ID 或时间戳(例如 mod 100),并基于此接受或丢弃,只是针对金丝雀和非金丝雀的相反逻辑。
现在我们面临如何稳健地做到这一点的问题,例如在运行时重新配置百分比并避免丢失消息或处理它们两次。看起来这升级为分布式共识问题以保持决策逻辑同步,我们非常希望避免这种情况,即使我们可以只使用 ZooKeeper。
这是一个可行的策略,还是有更好的方法来做到这一点?可能是一种避免达成共识的方法?
更新:不幸的是,Kafka 集群不在我们的控制之下,我们无法进行任何更改。
更新 2消息延迟不是一个大问题,添加几百个 100 毫秒是可以的,不会被注意到。