KafkaConsumer position()vs commited()?

use*_*706 8 apache-kafka kafka-consumer-api

我不理解javadoc中的KafkaConsumer position()和commited()方法之间的区别。

position:公共long position(TopicPartition分区)获取将要提取的下一条记录的偏移量(如果存在具有该偏移量的记录)。

已提交:获取给定分区的最后一个提交偏移量(无论此提交是由该进程还是其他进程执行)。如果发生故障,此偏移量将用作使用者的位置。该调用将阻止进行远程调用,以从服务器获取最新的提交偏移量。

这是否意味着如果获取的consumer.poll()允许说50条消息从偏移101到150,并且消费者具有手动偏移提交。而且使用者仍在处理这50条消息,因此最后一个提交的偏移量是100。现在,commited()将返回100,但是位置将返回151(已经获取到消息101到150)。

Mic*_*son 6

对,那是正确的。

当您poll()seek()与您的消费者收到的最新消息抵消时,头寸会自动更新。

承诺头寸是指客户在一次委托提交中使用的最新偏移量(手动或自动)。

例如,您可能有一个禁用了自动提交的使用者,而且也从未手动调用提交。在这种情况下,提交的职位将永远不会改变,而职位会随着客户端收到消息而更新。