如何使用nodejs消费者在kafka中实现并行性?



从理论上讲,由于nodejs是单线程的,当我定义多个消费者以提高吞吐量时,如何实现并行性?

例如,如果我有一个有4 个分区的 kafka 主题,在消费者端,当与 nodejs 一起使用时,我将如何能够并行使用 4 条消息。我最多可以使用单线程事件循环实现并发。

一种可能的解决方案是分叉子进程(在本例中为 3(,以便每个进程都可以从特定分区接收消息,假设系统有 3 个空闲内核。但是这种方法的效率/效果如何?

实现这一目标的最佳方法是什么?

在 Kafka 中,分区是并行级别。此外,Kafka 集群中的分区越多,可以实现的吞吐量就越高。

Kafka 主题分为多个分区,这些分区通过跨多个代理拆分数据来实现并行性。多个分区使多个使用者能够并行读取主题。因此,为了实现并行处理,您需要将主题划分为多个分区。

为了增加现有主题的分区数,您可以简单地运行

bin/kafka-topics.sh 
--zookeeper localhost:2181 
--alter 
--topic topicName 
--partitions 40

不过,这不会移动现有数据


关于使用者、使用者组和分区的说明
如果您有 N 个分区,则同一使用者组中最多可以有 N 个使用者,每个使用者都从单个分区读取数据。当使用者少于分区时,某些使用者将从多个分区读取数据。此外,如果您的使用者多于分区,则某些使用者将处于非活动状态,并且根本不会收到任何消息。

最新更新