Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.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
Java 卡夫卡消费者投票不读取同一批,即使禁用了自动偏移_Java_Apache Kafka - Fatal编程技术网

Java 卡夫卡消费者投票不读取同一批,即使禁用了自动偏移

Java 卡夫卡消费者投票不读取同一批,即使禁用了自动偏移,java,apache-kafka,Java,Apache Kafka,我想了解kafkaConsumer.poll()方法的行为 我将消费者配置为不自动提交 Properties properties = new Properties(); properties.setProperty("bootstrap.servers", bootstrapAddress); KafkaConsumer consumer = new KafkaConsumer(properties); 据我所知,基于Javadoc,如果我 ConsumerR

我想了解kafkaConsumer.poll()方法的行为 我将消费者配置为不自动提交

    Properties properties = new Properties();
    properties.setProperty("bootstrap.servers", bootstrapAddress);
    KafkaConsumer consumer = new KafkaConsumer(properties);
据我所知,基于Javadoc,如果我

    ConsumerRecords firstBatch = consumer.poll(0l);
    ConsumerRecords secondBatch = consumer.poll(0l);
假设主题中只有一个分区,因为偏移量尚未提交,
firstBatch
secondBatch
都应该包含相同的
ConsumerRecords
。 我的假设正确吗?我的问题是,每次调用
consumer.poll(0l)
时,都会提取下一批
ConsumerRecords

firstBatch和secondBatch应包含相同的用户记录

这是错误的,卡夫卡消费者补偿将在每次后续轮询中自动增加,即使禁用了自动
offset
或手动提交了
offset

消费者的位置给出了下一条记录的偏移量。它将比使用者在该分区中看到的最高偏移量大一个每次消费者在呼叫轮询(long)中收到消息时,它都会自动前进。

提交位置是安全存储的最后一个偏移量如果进程失败并重新启动,这是使用者将恢复到的偏移量。使用者可以定期自动提交偏移量;或者,它可以选择通过调用一个提交API(例如commitSync和commitSync)手动控制此提交位置


另一方面,您的假设是正确的,当未提交
offset
且重新启动kafka consumer时,它将轮询旧批次或从提交旧偏移量的起始位置开始轮询。

谢谢您的回答。我知道有两个偏移量,一个在服务器分区主题中,另一个在使用者会话中。自动提交属性定义了在服务器端如何处理偏移量提交,但是
poll()
方法总是移动使用者偏移量。