从理论上讲,由于nodejs是单线程的,当我定义多个使用者以增加吞吐量时,如何实现并行性?
例如,如果我有一个kafka主题有4个分区,那么在consumer端,当与nodejs一起使用时,我如何能够并行地使用4条消息。我最多可以使用单线程事件循环实现并发。
一种可能的解决方案是分叉子进程(在本例中是3个),这样每个进程都可以接收来自特定分区的消息(假设系统有3个空闲内核)。但是这种方法有多有效?
实现这一目标的最佳方法是什么?
从理论上讲,由于nodejs是单线程的,当我定义多个使用者以增加吞吐量时,如何实现并行性?
例如,如果我有一个kafka主题有4个分区,那么在consumer端,当与nodejs一起使用时,我如何能够并行地使用4条消息。我最多可以使用单线程事件循环实现并发。
一种可能的解决方案是分叉子进程(在本例中是3个),这样每个进程都可以接收来自特定分区的消息(假设系统有3个空闲内核)。但是这种方法有多有效?
实现这一目标的最佳方法是什么?
1条答案
按热度按时间xyhw6mcr1#
在Kafka中,分区是并行级别。此外,kafka集群中的分区越多,可以获得的吞吐量就越高。
一个kafka主题被划分为多个分区,通过在多个代理之间分割数据来实现并行性。多个分区使多个使用者能够并行地读取一个主题。因此,为了实现并行处理,您需要将主题划分为多个分区。
为了增加现有主题的分区数,只需运行
不过,这不会移动现有数据
关于使用者、使用者组和分区的说明
如果有n个分区,那么在同一个使用者组中最多可以有n个使用者,每个使用者都从单个分区读取数据。当使用者少于分区时,一些使用者将从多个分区读取数据。另外,如果使用者比分区多,则某些使用者将处于非活动状态,并且根本不会收到任何消息。