如何在不分割主题的情况下在消耗卡夫卡消息中实现多处理?

时间:2018-10-03 12:22:28

标签: apache-kafka kafka-consumer-api

我的主题只有一个分区,但是我需要实现多个处理。 我有大量异步生成的消息,我想异步读取所有这些消息并提交每条消息。

1 个答案:

答案 0 :(得分:3)

AFAIK,如果没有一个以上的分区(即至少两个),就无法实现并行处理。 在Kafka中,分区是并行度。此外,Kafka群集中的分区越多,可以实现的吞吐量就越高。

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

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

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

这不会移动现有数据

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