【问题标题】:Is there any way to get the eldest available offset for a kafka topic有什么方法可以获取 kafka 主题的最老可用偏移量
【发布时间】:2020-09-08 17:43:12
【问题描述】:

我有一个要求,我要存储偏移量的信息,直到系统读取数据为止。因此,下次当系统再次开始从 kafka 读取数据时,我需要读取系统中旧偏移量与最新偏移量之间的数据。但是由于 kafka 保留策略,旧的偏移量可能无效。因此,如果我们在 kafka 消费者中指定较旧的偏移量,会发生什么行为?还有什么方法可以获取特定主题/偏移量的最旧偏移量值,以便我们开始读取它?

【问题讨论】:

    标签: java apache-kafka kafka-consumer-api offset spring-kafka


    【解决方案1】:

    在启动过程中只需执行seekToBeginning

    实现ConsumerSeekAware,或者最好扩展AbstractConsumerSeekAware

    here

    只需在onPartitionsAssigned 中致电seekToBeginning

    【讨论】:

      【解决方案2】:

      这取决于您配置消费者的方式。具体来说,auto.offset.rest 参数。如果您将其设置为earliest,您的消费者将从最早的可用偏移量开始消费(如果您尝试使用的偏移量无效)。 这样你就不需要找到最旧的偏移值,因为消费者的行为就像我描述的那样。 您可以找到更多详细信息here

      【讨论】:

      • auto.offset.reset 仅适用于新消费者group.ids。您必须寻找消费者是否已经提交了偏移量。
      • @GaryRussell 据我了解auto.offset.reset 的描述,它特别适用于由于保留而删除偏移量的情况:“当 Kafka 中没有初始偏移量或如果服务器上不再存在当前偏移量(例如,因为该数据已被删除)"
      • 确实如此,但如今这种情况很少见 - 算法已更改(在 2.1.0 IIRC 中),因此不会删除组(默认情况下),除非自最后一个消费者过去 7 天离开组(之前的保留时间从最后一个偏移提交时间开始)。无论如何,从Kafka的角度来看,这样的消费者被认为是新消费者。然而,用你自己的方式表达更正确。
      猜你喜欢
      • 2020-08-04
      • 2016-05-27
      • 1970-01-01
      • 1970-01-01
      • 2019-01-06
      • 2017-12-12
      • 2016-11-20
      • 2019-07-01
      • 2018-01-24
      相关资源
      最近更新 更多