我已经编写了一个使用Spring Kafka的单个Kafka消费者,它从单个主题中读取数据,并且是消费者组的一部分。一旦消费了消息,它将执行所有下游操作并转到下一个消息偏移量。我将其打包为WAR文件,并且我的部署流程将其推送到单个实例。使用我的部署流程,我可以将此构件潜在地部署到部署池中的多个实例。
但是,当我想要多个消费者作为基础架构的一部分时,我无法理解以下内容:
我实际上可以在我的部署池中定义多个实例,并使所有这些实例上运行此WAR。这意味着,它们都在监听相同的主题,都是同一消费者组的一部分,并且实际上将分区分配给它们自己。下游逻辑将像原来一样工作。对于我的用例,这很完美地解决了问题,但我不确定是否应该遵循这种最佳实践?
在网上阅读时,我发现这里和这里有资源,人们定义了一个单个的消费者线程,但在内部创建了多个工作线程。还有一些示例,我们可以定义多个执行下游逻辑的消费者线程。思考这些方法并将它们映射到部署环境,我们可以使用更少的机器实现与我的理论解决方案相同的结果。
就我个人而言,我认为我的解决方案简单且可扩展,但可能不是最优的,而第二种方法可能是最优的,但想知道您的经验、建议或任何其他应该考虑的度量标准/约束条件?此外,我认为使用我的理论解决方案,我实际上可以将基础机器设计为Kafka消费者。
虽然我知道,我没有发布任何代码,但请让我知道是否需要将此问题移动到另一个论坛。如果您需要特定的代码示例,我也可以提供,但在我的问题背景下,我认为它们并不重要。
ConcurrentKafkaListenerContainerFactory
,并能够根据我的主题分区设置并发性。此外,由于Spring正在管理消费者线程,因此消费者线程管理的生命周期将更加清洁。 - user3842182Consumer
实例(和线程)。 没有将任务交给“工作”线程的概念。 这相当于在每个WAR中有n
个容器(实际上就是并发容器内发生的情况)。 - Gary Russell