Kafka 是否能够拥有动态数量的消费者?
Is Kafka able to have a dynamic number of consumers?
我们正在寻找新的消息传递平台,并将我们的选择范围缩小到 RabbitMQ 或 Kafka。
现在,我倾向于 Kafka,但我怀疑它是否是一个很好的选择,因为我们有一个要求。
我们需要一个由未知数量的消费者使用的队列。也就是说,我们需要在 "workers" 上线时动态添加和删除消费者来进行处理。另外,工人随时可能下班。
因此,例如,我们可能会启动一个根本没有消费者的队列,然后消费者的数量可能会增长到 30 个。之后它可能会增长到 5000 个或更多,然后又下降到 3 个。
我们不关心这个特定用例的消息排序。 Kafka 适合这个吗?
此外,我们计划维护一个消费者线程池,以便工作人员可以获取一条消息并进行处理。所以池中可能有 100 个消费者,而只有 20 个工人。由于消息发送缓冲,我们是否有可能最终在其他 80 个消费者中收到消息,这些消息未在工作人员中使用?换句话说,Kafka 是否像某些消息传递系统那样在消费者被请求之前预先将消息传递给消费者?
是的,kafka绝对可以满足你的要求。您可以拥有多对多 producers/consumers。如果您的所有消费者都在同一个消费者组中,则所有消息将在所有消费者之间平均分配。如果你关闭/添加新的消费者也不是问题,kafka 会自动为你管理。
关于你的最后一个问题 - kafka 消费者是基于拉取的,因此消费者有责任检查是否有一些消息要处理。
我们正在寻找新的消息传递平台,并将我们的选择范围缩小到 RabbitMQ 或 Kafka。
现在,我倾向于 Kafka,但我怀疑它是否是一个很好的选择,因为我们有一个要求。
我们需要一个由未知数量的消费者使用的队列。也就是说,我们需要在 "workers" 上线时动态添加和删除消费者来进行处理。另外,工人随时可能下班。
因此,例如,我们可能会启动一个根本没有消费者的队列,然后消费者的数量可能会增长到 30 个。之后它可能会增长到 5000 个或更多,然后又下降到 3 个。
我们不关心这个特定用例的消息排序。 Kafka 适合这个吗?
此外,我们计划维护一个消费者线程池,以便工作人员可以获取一条消息并进行处理。所以池中可能有 100 个消费者,而只有 20 个工人。由于消息发送缓冲,我们是否有可能最终在其他 80 个消费者中收到消息,这些消息未在工作人员中使用?换句话说,Kafka 是否像某些消息传递系统那样在消费者被请求之前预先将消息传递给消费者?
是的,kafka绝对可以满足你的要求。您可以拥有多对多 producers/consumers。如果您的所有消费者都在同一个消费者组中,则所有消息将在所有消费者之间平均分配。如果你关闭/添加新的消费者也不是问题,kafka 会自动为你管理。
关于你的最后一个问题 - kafka 消费者是基于拉取的,因此消费者有责任检查是否有一些消息要处理。