【问题标题】:Kafka fails to keep track of last-commited offsetKafka 未能跟踪最后提交的偏移量
【发布时间】:2020-09-06 19:51:31
【问题描述】:

kakfa-broker 在管理偏移量方面是否存在任何已知问题? Bcz,我们面临的问题是当我们尝试重新启动 kafka-consumer(即应用程序重新启动)时,有时所有偏移量都重置为 0。 完全不知道为什么消费者不能从最后提交的偏移量开始。

我们最终在 prod 中面临这个问题,其中整个 q 事件再次重播:

  • spring-boot 版本 -- 2.2.6 发布
  • spring-kafka - 2.3.7 版本
  • kafka-client -2.3.1
  • apache-kafka - kafka_2.12-2.3.1

我们有 10 个主题,每个主题属于同一组,每个主题有 50 个分区,我们在运行时根据负载增加主题分区和消费者计数。

  • 自动提交 = 假
  • 处理后同步提交每个偏移量
  • max-poll-records 设置为 1

完成所有这些配置后,它在本地设置中按预期运行,部署到 prod 后,我们不会在每次重新启动时都看到此类问题。 有没有我遗漏的配置。 完全无解!!!!

【问题讨论】:

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


    【解决方案1】:

    不要根据另一个答案中的建议启用自动提交;侦听器容器将更可靠地提交偏移量,并且正如您所说,您不会一直遇到问题。

    您是否有可能一周没有收到任何记录?

    或者,您的经纪人是否有可能拥有较短的 offsets.retention.minutes 属性?

    在 2.0 中,它从默认的 1 天更改为 1 周。如果偏移因过期而被删除,并且您重新启动消费者,您将获得观察到的行为。

    【讨论】:

    • 感谢您的快速回复!更正@Gary,我们在产品中使用“kafka_2.11-1.0.0”。其中 offsets.retention.minutes 的默认值为 1 天。即使过去的偏移量已过期,您能否解释一下,为什么偏移量会重置为 0?那么在回放中我们不应该看到过期的记录......对吗?另一个查询,kafka client -> 2.3.1 and broker version kafka_2.11-1.0.0" 不会导致手动提交偏移量的任何问题..
    • 根据文档,只有当消费者组失去所有消费者 offsets.retention.minutes 需要澄清 plz,偏移量才会过期,如果偏移量过期并且您重新启动消费者在收到更多记录之前,没有关于该消费者的代理信息? 你的意思是说如果 lastCommitedOffset 过期,重新启动后启动的新消费者将开始轮询从 0 开始的偏移量(过期偏移量)用于代理分配给它的特定分区。
    • 是的,我的评论是错误的。更正:它实际上并没有重置为 0。Kafka 维护每个消费者/分区的最后提交的偏移量。如果偏移量因您的消费者离线 24 小时而过期,并重新启动消费者,则代理上没有关于该消费者的信息,因此它被视为新消费者,如果您有 auto.offset.reset=earliest,您将获得一切又来了。对于 2.0 之前的经纪人,您需要增加保留时间。不;对 1.0 使用 2.3 客户端是可以的;但最好换个新的代理——当前是 2.5.0。
    • 有些人会遇到这种情况,例如,他们的应用程序只在工作日运行,所以它总是会在星期一从头开始重新启动。我认为这是将其增加到一周的动机。
    • 感谢您的澄清,但是我们的消费者还没有超过一个小时,然后我们也面临重新播放所有事件的问题。任何建议如何解决这个问题?将偏移量存储在外部存储(RDBMS)中会有帮助吗?
    【解决方案2】:

    您需要确保:

    1) 您使用的是相同的消费者组 ID

    2) auto.offset.reset 设置为 latest

    spring.kafka.consumer.group-id=your-consumer-group-id
    spring.kafka.consumer.auto-offset-reset=latest
    

    如果您仍然看到此问题,请尝试启用自动提交

    spring.kafka.consumer.enable-auto-commit=true
    

    如果问题消失,则意味着您的手动提交没有按预期工作。

    【讨论】:

      猜你喜欢
      • 2021-11-15
      • 1970-01-01
      • 2018-07-01
      • 2021-11-14
      • 2021-05-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-17
      • 2017-06-24
      相关资源
      最近更新 更多