Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.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
kafka python KafkaConsumer多分区提交偏移量_Python_Apache Kafka_Commit - Fatal编程技术网

kafka python KafkaConsumer多分区提交偏移量

kafka python KafkaConsumer多分区提交偏移量,python,apache-kafka,commit,Python,Apache Kafka,Commit,是否有可能将偏移提交到具有多个分区的Kafka主题,以便将偏移量1提交到分区1,将偏移量2提交到p2等等 编辑: 是的,有可能: consumer = KafkaConsumer() topicpartitions = [TopicPartition('topicname', partitionId) for partitionId in consumer.partitions_for_topic('topicname')] consumer.assign(topicpartitions) f

是否有可能将偏移提交到具有多个分区的Kafka主题,以便将偏移量1提交到分区1,将偏移量2提交到p2等等

编辑:

是的,有可能:

consumer = KafkaConsumer()
topicpartitions = [TopicPartition('topicname', partitionId) for partitionId in consumer.partitions_for_topic('topicname')]

consumer.assign(topicpartitions)
for tp in topicpartitions:
    consumer.commit({tp: OffsetAndMetadata(1000, None)})

for msg in consumer:
    #do whatever

卡夫卡偏移始终为每个分区。我的意思是,如果您的主题有2个分区,p0中的消息将从偏移量0开始,并为每个新消息增加my 1。p1相似性中的消息从偏移量0开始并增加1

因此,如果您发布了两条消息(没有键),一条将进入偏移量为0的分区0,另一条将进入偏移量为0的分区1

现在,如果另一个应用正在使用此主题并要提交其偏移量,则它将在
\uu consumer\u offset
主题中生成消息,其中包括其group.id、主题、分区号和偏移量。例如,类似{“myconsumerid”,“mytopic”,P0,1}和{“myconsumerid”,“mytopic”,P1,1}的内容

如果应用程序停止,并且一个或两个其他使用者使用相同的group.id启动,则它们将从分配给它们的最后一个提交的偏移量开始继续

如果要将组偏移重新定位到任何其他位置,可以使用0.11 Kafka工具更改组的已提交偏移

bin/kafka-consumer-groups.sh--重置偏移量

如果您为每个分区指定了正确的标志,此工具将允许您独立设置其偏移量

如果愿意,可以从Python程序调用此工具。应首先关闭消费者组中的所有现有消费者,否则他们可能会过度写入偏移量

如果您想编写此工具的Python版本,而不是运行现有的CLI命令,则需要找到支持seek()的Python客户端,这样您就可以将偏移量更改为所需的偏移量,然后在消费应用程序重新启动时将其提交到该位置。另一种方法是放弃动态分区分配,手动分配()要更改的分区,并将偏移量提交到分配的列表中。您不能在同一应用程序中同时使用动态管理的分区订阅和手动分配的分区


您还需要确保在这些分区上使用同一使用者组的所有其他使用者都已关闭,或者一旦其他使用者自动提交或手动提交其对您刚才设置的偏移量的偏移量,提交的偏移量将被其他使用者覆盖。

您的答案与问题无关。问题是在python中是否可以将偏移提交到kafka主题分区。因此,假设您有一个主题12个分区,您想将12个k:v对的dict提交到kafka,其中k=分区,v=偏移量值,那么下次开始使用存储在该主题中的消息时,您可以手动提交偏移量。e、 g.topic有10000个MSG,平均分布在10个分区上。您希望从手动强制偏移开始。您不能用任何语言编写消息和分配自己的偏移。补偿由代理生成,并且总是以单原子方式递增。生成消息会自动创建偏移。使用并调用commitSync()是提交使用者偏移量的操作。您是否在询问是否可以将现有的已提交偏移量重新定位为其他内容,因为这可以通过管理工具实现。Kafka将消息存储在主题中。每条消息都有一个偏移量。卡夫卡消费者可以将补偿提交回卡夫卡。卡夫卡还可以存储有关提交的偏移量的信息。您可以强制KafkaConsumer从最早或最新偏移量或从特定偏移量值消费。我的问题是:如何强制KafkaConsumer使用kafka主题中的消息,并为每个分区手动设置特定偏移量的多个分区。我正试图帮助您,您的问题有点含糊不清,因此如果我错误地解释了它,请不要生气。您应该询问是否可以使用Python“重置”消费者组的已提交偏移量。您不会说您正在使用3个Kafka Python客户机中的哪一个。你没有说你使用的是什么版本的卡夫卡。不,我不想重置偏移量。您只需通过更改组id来重置偏移量即可。我说的是哪一个客户端->请阅读以下问题:它显示“kafka python”,这是客户端的名称。卡夫卡版本>0.8.2