【问题标题】:Offset commit on Spring Kafka while setBatchListener(true) with enable.auto.commit true在 setBatchListener(true) 和 enable.auto.commit true 时在 Spring Kafka 上偏移提交
【发布时间】:2019-11-30 16:18:33
【问题描述】:

有人可以帮助了解消费者线程何时将使用 spring kafka 批处理侦听器和自动提交设置为 true 来提交偏移量吗?消费者线程是否会在默认处理批处理中的所有消息后提交偏移量?我知道如果 autoCommit 为 false,提交将基于 AckModes,但想知道 autoCommit 何时为 true

  • Spring Kafka - batchListener -true
  • enable.auto.commit - true
  • MAX_POLL_RECORDS_CONFIG - 默认 (500)
  • MAX_POLL_INTERVAL_MS_CONFIG - 默认(5 分钟)

【问题讨论】:

    标签: kafka-consumer-api spring-kafka


    【解决方案1】:

    使用enable.auto.commit=true,容器完全不负责提交偏移量——这完全取决于 kafka-clients 库中的算法。

    来自 kafka 文档:

    如果为 true,消费者的偏移量将在后台定期提交。

    另见auto.commit.interval.ms

    如果 enable.auto.commit 设置为 true,消费者偏移量自动提交到 Kafka 的频率(以毫秒为单位)。

    默认设置为 5 秒,因此如果您在少于该时间的时间内处理批处理,则在批处理完成时可能会或可能不会提交偏移量。客户端在下一次轮询开始时检查自上次提交以来的时间。

    我更喜欢将它设置为false,这样你就有一个明确定义的行为——当批处理侦听器正常退出时,容器将提交偏移量。

    【讨论】:

    • 谢谢@Gary Russell。 Myprocess 将花费超过 5 秒来处理批处理(并且小于 MAX_POLL_INTERVAL_MS_CONFIG),因此可能存在重复处理的可能性(可能非常低),对吧?我的集群是0.10.2版本
    • 我不这么认为,除非您的服务器在批处理过程中出现故障。正如我所说,客户端在获取下一个poll() 中的下一组记录之前执行自动提交(只要间隔已过期)。就像我说的,我建议不要使用它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-04
    • 1970-01-01
    • 2018-03-27
    • 2020-01-27
    • 1970-01-01
    • 2017-10-16
    • 1970-01-01
    相关资源
    最近更新 更多