【问题标题】:KafkaConsumer position() vs committed()?KafkaConsumer 位置()与承诺()?
【发布时间】:2018-05-12 15:07:20
【问题描述】:

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

位置: 公开多头(TopicPartition分区) 获取将要获取的下一条记录的偏移量(如果存在具有该偏移量的记录)。

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

这是否意味着如果一个 consumer.poll() 获取了假设从偏移 101 到 150 的 50 条消息,并且消费者有手动偏移提交。消费者仍在处理这 50 条消息,所以最后提交的偏移量是 100。现在,committed() 将返回 100,但位置将返回 151(因为已经获取了 101 到 150 的消息)?

【问题讨论】:

  • 是的,我想是的。

标签: apache-kafka kafka-consumer-api


【解决方案1】:

是的,没错。

当您poll()seek() 时,位置会自动更新,并对应于消费者收到的最新消息偏移量。

提交位置是指客户端在提交调用中使用的最新偏移量(手动或自动)。

例如,您可以让消费者禁用自动提交,并且从不手动调用提交。在这种情况下,提交的位置永远不会改变,而位置会随着客户端接收消息而更新。

【讨论】:

  • 如果我们寻求的偏移量不存在,消费者位置是否会获取下一个偏移量?
  • 如果消费者寻找一个不存在的偏移量,它将使用auto.offset.reset来寻找一个新的有效位置。
  • 嗨@Mickael。根据样本,我还有另一个问题。在这批(101 - 150)中,如果我触发consumer.commitSync(),哪个偏移量将是下一个提交的偏移量? 150 或 151
猜你喜欢
  • 2020-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-09
  • 2014-07-13
相关资源
最近更新 更多