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

apeeds0o  于 2021-06-05  发布在  Kafka
关注(0)|答案(1)|浏览(492)

从理论上讲,由于nodejs是单线程的,当我定义多个使用者以增加吞吐量时,如何实现并行性?
例如,如果我有一个kafka主题有4个分区,那么在consumer端,当与nodejs一起使用时,我如何能够并行地使用4条消息。我最多可以使用单线程事件循环实现并发。
一种可能的解决方案是分叉子进程(在本例中是3个),这样每个进程都可以接收来自特定分区的消息(假设系统有3个空闲内核)。但是这种方法有多有效?
实现这一目标的最佳方法是什么?

xyhw6mcr

xyhw6mcr1#

在Kafka中,分区是并行级别。此外,kafka集群中的分区越多,可以获得的吞吐量就越高。
一个kafka主题被划分为多个分区,通过在多个代理之间分割数据来实现并行性。多个分区使多个使用者能够并行地读取一个主题。因此,为了实现并行处理,您需要将主题划分为多个分区。
为了增加现有主题的分区数,只需运行

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

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

相关问题