kafka消费者是顺序的还是并行的?

Posted

技术标签:

【中文标题】kafka消费者是顺序的还是并行的?【英文标题】:Is kafka consumer sequential or parallel? 【发布时间】:2019-07-06 00:51:07 【问题描述】:

在我的应用程序中,有多个企业。每个企业登录并执行一些操作,例如上传数据,然后 Kafka 生产者获取数据并发送到主题。另一方面,Kafka 消费者使用来自主题的数据并执行业务逻辑。并保存到数据库中。 在这种情况下,当单个企业登录时,一切都是完美的。但是当多个企业登录时,Kafka 会按顺序消费。 IE。, 我怎样才能使过程并行?在多个客户端请求。 提前致谢。

【问题讨论】:

你需要根据消费者数量partition the topic,然后你的消费者的每个实例都会被分配一个或多个分区,它们会并行独立消费。如有必要,您可以使用分区键来确保相关消息到达同一消费者。 【参考方案1】:

如果该主题只有一个分区,则它在消费者端是顺序的。一个分区的多个生产者不保证排序。

消费者和生产者将批处理消息并分块处理它们。

另一方面,Kafka 消费者消费来自主题的数据并执行业务逻辑。并持久化到数据库中。

我建议不要为此使用普通消费者。请研究 Kafka Connect 并查看您的数据库是否受支持

【讨论】:

【参考方案2】:

如前面的答案中所述,您可以使用多个分区。 另一种选择是您可以利用 threading(Threadpoolexecutor) 所以如下: 接收消息 -> 创建并行线程来执行所需的逻辑 -> 确认消息。 请确保您有限制(使用线程池执行器)应用程序性能。

【讨论】:

其实企业登录上传数据的过程是spring app获取上传数据,kafka生产者向topic发送数据,另一端consumer获取数据并处理。考虑通过 Kafka 生产者、Kafka 消费者和持久化到数据库中处理数据的时间是 3 分钟。平均而言,在完成第一个企业之前,另一个企业进入了画面。第二个企业请求正在等待第一个请求完成。这里每个企业请求都作用于具有多个分区的同一主题。 您可以在该主题中创建多个分区,并在写入 Kafka 时使用企业 ID 作为分区键,以便消费者可以并行运行并按顺序接收消息。消费者可以满足一个或多个分区,但要获得最大并行度,您可以每个分区运行一个消费者。您使用什么样的数据库来存储这些数据?当您编写自己的消费者时,您需要做的事情很少如果您有更严格的交付语义,则处理类似重新平衡,一些偏移管理。如果可用,您应该查看内置的 kafka 连接选项

以上是关于kafka消费者是顺序的还是并行的?的主要内容,如果未能解决你的问题,请参考以下文章

Kafka消费者可以并行处理多条消息吗

具有动态数量的并行消费者的 Kafka 工作队列

Kafka如何保证消息的顺序性

分布式消息队列RocketMQ&Kafka -- 消息的“顺序消费”

Kafka分区数与消费者个数

光说不练假把式,一起Kafka业务实战。