我们有一群生产者,他们向一群消费者发送消息/事件。每个消息必须由一个使用者使用。我们知道,通过使用Kafka中的消费者群体,可以很容易地实现这一常见场景。然而,我们还有几个额外的限制:不是每个消费者都能消费每一条消息。消息附带有(任意的)需求,只有满足这些需求的使用者才能处理它们。对于消费者组来说,这仍然是可能的,消费者首先查看消息,如果消息不符合要求,则最终重新提交。然而,并不能保证每个消费者都能看到消息至少一次,因此它们可能会无限期地跳转,尽管可能有一个匹配的消费者。我们也不能设置多个主题,因为消费者的需求是由用户而不是应用程序定义的任意复杂布尔公式。这会导致主题的组合爆炸。
此外,我们希望能够动态地从组中添加和删除使用者,以防需要更多的处理资源。据我所知,如果没有足够的分区,这可能会导致消费者得不到任何消息,而且动态重新分区也不太可能(没有管理交互)。
在Kafka有什么办法可以让它发挥作用吗?也许Kafka也不是合适的技术,还有其他更合适的吗?我们还研究了rabbitmq,但也没有找到一种方法来保证每个消费者都能看到一条消息,从而能够评估需求。
1条答案
按热度按时间cuxqih211#
通过在使用者配置中将enable_auto_commit_config设置为false,您可以在确定所需事件后手动提交偏移量,但是您的用例将触发过度的重新平衡,从而停止任何消耗。我不认为Kafka是合适的基础设施。
但是,如果可以用有限数量的键来标记事件,则可以指定生成它们的分区。在使用者中使用相同的键可以保证轮询来自同一分区的事件。请注意,主题中的分区数必须与唯一键数相同。