用于消息处理的多个节点Kafka

问题描述 投票:0回答:1

我们在Kubernetes上部署了一个Spring Boot应用程序来处理消息:它从Kafka主题读取,然后进行一些映射,最后,它写入Kafka主题

为了获得更高的性能,我们需要更快地处理消息,因此我们引入了这个Spring Boot应用程序的多个节点。

但是我相信这会导致问题,因为:

  • 消息应按顺序处理

  • 消息包含状态

有什么解决方案可以使消息保持顺序,并保证已经由节点处理的消​​息不会被另一个节点处理,并解决由多个节点中的处理引起的任何其他问题。

由于我们正在构建POC,请随时解决所有可能的解决方案。

concurrency apache-kafka spring-kafka high-availability confluent-kafka
1个回答
0
投票
当使用来自Kafka的消息时,牢记

Consumer Group的概念很重要。此外,对Kafka进行读写的应用程序会根据Kafka主题中的分区数量进行扩展。

如果您有多个节点仅使用一个分区来消费一个主题,则不会有任何影响,因为一个分区只能从使用者组中的一个使用者读取。您可以在Consumers的Kafka文档中找到更多信息。

当一个主题具有多个分区时,排序可能会成为问题。 Kafka仅保证

within

一个分区的顺序。这里是描述interaction between consumer group and partitions的Kafka文档的摘录:

通过在主题内具有并行性(即分区)的概念,Kafka能够在用户进程池中提供排序保证和负载均衡。这是通过将主题中的分区分配给消费者组中的消费者来实现的,以便每个分区都由组中的一个消费者完全消费。通过这样做,我们确保使用者是该分区的唯一读取器,并按顺序使用数据。由于存在许多分区,因此仍然可以平衡许多使用者实例上的负载。但是请注意,使用者组中的使用者实例不能超过分区。
© www.soinside.com 2019 - 2024. All rights reserved.