Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache kafka 如何在不划分主题的情况下,在使用kafka消息时实现多处理?_Apache Kafka_Kafka Consumer Api - Fatal编程技术网

Apache kafka 如何在不划分主题的情况下,在使用kafka消息时实现多处理?

Apache kafka 如何在不划分主题的情况下,在使用kafka消息时实现多处理?,apache-kafka,kafka-consumer-api,Apache Kafka,Kafka Consumer Api,我的主题只有一个分区,但我需要实现多个处理。 我有大量异步生成的消息,我希望异步读取所有这些消息并提交每条消息 AFAIK如果没有多个分区(即至少两个分区),就无法实现并行处理。 在卡夫卡中,分区是并行级别。此外,Kafka集群中的分区越多,可以实现的吞吐量就越高 Kafka主题被划分为多个分区,通过在多个代理之间拆分数据来实现并行性。多个分区使多个使用者能够并行读取一个主题。因此,为了实现并行处理,您需要将主题划分为多个分区 为了增加现有主题的分区数量,只需运行 bin/kafka-topic

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

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

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

为了增加现有主题的分区数量,只需运行

bin/kafka-topics.sh --zookeeper localhost:2181 --alter --topic topicName --partitions 40
但这不会移动现有数据

关于消费者、消费者组和分区的说明

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

感谢Giorgos Myrianthous的澄清,但是我应该为每个消费者分配分区号吗?以及如何对每个分区进行提交。我需要在执行某些操作后手动提交消息,如果消息未提交,我将再次阅读。这是我的用例。如果只有一个消费者,并且没有给出分区号,那么会有并行性吗?如果是,如何处理?不介意我对此有很多疑问。@kkk您不必为每个使用者定义分区。您只需要确保您的消费者属于同一消费者群体。关于偏移量的问题,您必须将
enable.auto.commit
设置为
false
,然后在需要时手动提交偏移量。非常感谢@Giorgos MyrianthousHi@Giorgos Myrianthous,正如您所说,我创建了kafka分区,但是当我运行多个消费者时,所有消费者都在读取所有分区的相同消息。下面是我的示例代码。从kafka导入kafka客户端,来自kafka的SimpleConsumer从sys import argv import time consumer=Kafkanconsumer(“abc”,group_id='my-group',bootstrap_servers=['my-server'])导入kafka消费者中的消息:#time.sleep(6)打印“PARTITION”+str(message[1])+“OFFSET:+str(message[2])+“\t MSG:+str(message[4]))consumer.commit()@kkk能否请您提出另一个问题,因为我认为这应该是另一个问题。