【问题标题】:Spring cloud stream manual offset managementSpring Cloud Stream 手动偏移管理
【发布时间】:2017-03-30 07:49:40
【问题描述】:

我可以使用 Spring Cloud Steam 实现手动 Kafka 偏移管理,如下所示:

  1. 每当我的消费者处理消息时,它都会将其偏移量提交到数据库中。不喜欢卡夫卡
  2. 每当我的消费者重新启动时,它都会从数据库中读取最后处理的偏移量,寻找该偏移量并开始处理下一条消息。

【问题讨论】:

    标签: java spring apache-kafka spring-cloud-stream


    【解决方案1】:

    Spring Cloud Stream 允许您在消费者应用程序中手动确认消息。不知道为什么要将偏移量保存到数据库中(可能是您的需要)。但我想知道使用手动确认模式是否有助于您的情况。

    您可以通过将spring.cloud.stream.kafka.bindings.<inboundChannelName>.consumer.autoCommitOffset 设置为 false 来使用手动确认模式,并仅在消费者处理完消息后手动确认消息。你可以找到一个例子here

    【讨论】:

    • 问题在于重启。我想严格控制消费者重启后从哪里开始,以便实现一次性交付。
    • 结合手动确认模式,在消费者重启时从latest偏移量开始,是不是有助于实现exactly-once投递?
    • 底层 spring-kafka 项目(使用 kafka 10 时)通过 seek mechanism 支持此功能,但 Spring Cloud Stream 目前并未将其作为功能公开。
    • 在 Kafka 活页夹中有一个未解决的问题:github.com/spring-cloud/spring-cloud-stream-binder-kafka/issues/…
    • 但是请注意,重置偏移量和重播仅适用于单个使用者应用程序(或在 Spring Cloud Stream 中用于静态分配的分区) - 否则它最终会在多实例启动时处于竞争状态.
    猜你喜欢
    • 2023-03-29
    • 2017-10-02
    • 2017-07-09
    • 1970-01-01
    • 2020-09-07
    • 2020-05-21
    • 2016-12-27
    • 1970-01-01
    • 2019-12-14
    相关资源
    最近更新 更多