我们正在寻找一个新的消息传递平台,并将我们的选择范围缩小到RabbitMQ或Kafka。
现在,我倾向于Kafka,但我有一些疑问,根据我们的要求,这是一个不错的选择。
我们需要有一个由未知数量的消费者使用的队列。也就是说,当“工作人员”上线进行处理时,我们需要动态添加和删除消费者。此外,工人可能随时辍学。
因此,例如,我们可能会启动一个根本没有消费者的队列,然后消费者的数量可能会增加到30个。之后它可能会增长到5000个或更多,然后再回落到3个。
我们不关心这个特定用例的消息排序。卡夫卡是否适合这个?
此外,我们计划维护一个消费者线程池,以便工作人员可以获取单个消息并对其进行处理。因此,池中可能有100名消费者,只有20名工人。是否有可能我们最终在其他80个消费者中发送消息,这些消息由于消息发送缓冲而未在工作人员中使用?换句话说,Kafka是否会像消息系统那样在请求之前向消费者预先发送消息?
答案 0 :(得分:1)
是的,kafka绝对可以满足您的要求。您可以拥有多对多的生产者/消费者。如果您的所有消费者都在同一个消费者群体中,则所有消息将在所有消费者之间平均分配。如果您关闭/添加新消费者也不是问题,kafka将自动为您管理所有消费者。
对于您的上一个问题 - kafka消费者是基于拉取的,因此消费者有责任检查是否有一些消息需要处理。