1. Introduction

KafkaConsumerOffset
  • Kafka消费者有个配置,用于在没以前提交的偏移量时如何操作,
    若消费者应用出现bug且已down,则可能会发生这种情况;

  • 如Kafka的保留期为7天,而消费者停机超过7天,
    则offset是"无效的invalid",因它们将被删除;

  • 此类情况:消费者可选择从分区的开始或从分区的结束开始读取,
    由consumer configuration的auto.offset.reset控制;

2. auto.offset.reset

Entry Memo

latest

默认,消费者将从分区的尾部(tail)读取消息

earliest

从分区中最早的偏移量读取

none

若没为消费者组找到以前的偏移量,则消费者抛出异常

3. offset.retention.minutes

  • Kafka消息偏移量的默认保留期,默认一周(7天),这是broker级别设置,
    是 __consumer_offsets 主题的偏移量保留期(以分种为单位);

  • 若预计消费者停机时间超过1周(therefore lose their commit offset),
    或主题是低吞吐主题,且消费者未处理数据超过一周,则此设置特别有助于增加;

  • 此情况下:若消费者确实丢失其偏移量,"auto.reset.offset"设置将生效,
    若想避免此情况,请将offset.retension.minutes增加到1月左右;

4. Replaying Consumer Data

  • 可读取偏移量早于分区提交的数据,这可能是在意外情况下(unexpected circumstance)
    从错误中恢复(recover from error)所必需的,要relay消费者组的数据,操作步骤:

  • 将所有消费者从特定组中take down;

  • 使用kafka-consumer-groups命令来设置偏移量;

  • 重启消费者;

5. Bottom Line

  • 设置适当的(proper)数据保留期(data retention period)
    和偏移保留期(offset retention period);

  • 确保自动偏移重置行为(auto offset reset behavior)是期望或想要的行为;

  • 在出现意外行为时使用replay capability;

6. Alternative Using Offset

  • 作为使用消费者组和偏移量的替代方案,可使用较低级别的Api,如seek()和
    assign(),使用自己的策略strategy来read from topic manually;