xiaoya5271 2018-12-22 12:37 采纳率: 0%
浏览 689

kafak的auto.offset.reset疑问

如果客户端消费消息没有提交,配置的auto.offset.reset=earliest ,如果服务器重启了,那么该group是否会重新消费服务器里面所有的消息?
如果auto.offset.reset=latest 是否也会重新消费?
网上查到的说明,是否就是指重启服务器的情况?
earliest
当各分区下有已提交的offset时,从提交的offset开始消费;无提交的offset时,从头开始消费
latest
当各分区下有已提交的offset时,从提交的offset开始消费;无提交的offset时,消费新产生的该分区下的数据
none
topic各分区都存在已提交的offset时,从offset后开始消费;只要有一个分区不存在已提交的offset,则抛出异常

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-07 12:39
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在Kafka中,auto.offset.reset 是一个用于指定如何重置消费者组(Consumer Group)的位置的参数。它有两种可能的值:earliestlatest

    1. earliest

      • 一旦某条消息被消费并提交到Zookeeper(Kafka的元数据存储),该消息将被标记为已消费。
      • 如果消费者组中的某个Topic的所有分区都没有已提交的offset,那么消费者将从头开始消费。
      • 如果消费者组中的某个Topic的部分分区有已提交的offset,那么消费者将从这些已提交的offset开始消费。
      • 如果消费者组中的某个Topic的所有分区都有已提交的offset,那么消费者将从这些已提交的offset开始消费。
    2. latest

      • 一旦某条消息被消费并提交到Zookeeper,该消息将被标记为已消费。
      • 如果消费者组中的某个Topic的所有分区都没有已提交的offset,那么消费者将从头开始消费。
      • 如果消费者组中的某个Topic的部分分区有已提交的offset,那么消费者将从这些已提交的offset开始消费。
      • 如果消费者组中的某个Topic的所有分区都有已提交的offset,那么消费者将从这些已提交的offset开始消费。
    3. none

      • 如果消费者组中的某个Topic的所有分区都没有已提交的offset,那么消费者将从头开始消费。
      • 如果消费者组中的某个Topic的部分分区有已提交的offset,那么消费者将从这些已提交的offset开始消费。
      • 如果消费者组中的某个Topic的所有分区都有已提交的offset,那么消费者将从这些已提交的offset开始消费。

    关于重启问题,通常情况下,即使Kafka服务本身重启,但是消费者组和其对应的topic不会自动重启,除非你设置了特殊的恢复策略或者手动进行恢复操作。

    1. 关于auto.offset.reset=earliest vs auto.offset.reset=latest的问题:
      • earliest 适用于大多数情况,因为它确保消费者能够从已知的数据点开始消费,而不会丢失任何信息。
      • latest 适用于那些在某些情况下,比如生产者错误地发送了消息但随后取消了这条消息的情况下,需要保证消费者能够消费所有未消费的消息的情况。

    总的来说,在大多数情况下,使用 earliest 参数会是更好的选择,因为这可以提供更稳定的服务,并且有助于避免因生产者错误导致的消息丢失。

    评论

报告相同问题?