2

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

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

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

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

4

1 回答 1

0

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

Kafka 主题被划分为多个分区,这些分区通过将数据拆分到多个代理来实现并行性。多个分区允许多个消费者并行读取一个主题。因此,为了实现并行处理,您需要将您的主题划分为多个分区。

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

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

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


关于消费者、消费者组和分区的注意事项
如果你有 N 个分区,那么在同一个消费者组中最多可以有 N 个消费者,每个消费者都从一个分区中读取。当您的消费者少于分区时,一些消费者将从多个分区中读取。此外,如果您的消费者多于分区,那么一些消费者将处于非活动状态并且根本不会收到任何消息。

于 2020-05-18T08:45:58.043 回答