【问题标题】:How do I disable committing of offsets in Spring Kafka to store offsets locally?如何禁用 Spring Kafka 中的偏移量提交以在本地存储偏移量?
【发布时间】:2020-07-03 10:07:59
【问题描述】:

我想使用 Spring Kafka 将事件处理到本地数据库中并将偏移量存储在数据库本身中,如“在 Kafka 外部存储偏移量”下的 https://kafka.apache.org/25/javadoc/index.html?org/apache/kafka/clients/consumer/KafkaConsumer.html 中所述。

Spring Kafka(带有 KafkaListener)似乎总是提交偏移量(因此需要 group.id),有没有办法完全禁用提交,允许在没有组的情况下进行监听?

【问题讨论】:

    标签: apache-kafka spring-kafka


    【解决方案1】:

    容器属性AckMode.MANUAL 将禁用容器的偏移提交。

    【讨论】:

    • 但是它不会期望监听器回调确认(触发提交)吗?如果我不这样做,是否不会有容器期待 ack 的队列?
    • 否;它不会;调用acknowledgment.acknowledge() 只是将消费者线程(MANUAL)的提交排队或在消费者线程(MANUAL_IMMEDIATE)上调用时立即提交偏移量。如果你不调用 ack,什么都不会发生;没有待处理的确认队列。
    【解决方案2】:

    Spring Kafka Consumer 有一个配置属性 enable.auto.commit。这可以设置为 false,以便您可以在代码中实现提交策略。请在此处查看文档:https://docs.spring.io/spring-kafka/reference/html/#committing-offsets

    KafkaListener 注解可以直接定义配置。请参阅 JavaDoc - https://docs.spring.io/spring-kafka/api/org/springframework/kafka/annotation/KafkaListener.html。

    【讨论】:

    • 如果 enable.auto.commit 设置为 false,容器仍将根据 AckMode 提交偏移量。查看代码,我没有发现任何完全禁止提交偏移量的 AckMode。
    • AckMode.MANUAL 将禁用容器的偏移提交。
    猜你喜欢
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-22
    相关资源
    最近更新 更多