spring-cloud-stream kafka离线消费者消息丢失

时间:2016-03-06 17:52:03

标签: spring-cloud-stream

我一直在玩spring-cloud-stream(1.0.0.BUILD-SNAPSHOT和kafka binder),并注意到消费者离线时,发送的任何消息都会丢失。当我启动消费者时,它不会处理发送给kafka的积压请求。这是故意的吗?

2 个答案:

答案 0 :(得分:4)

我们肯定需要改进我们的文档,但这里有一些指示。

如果您希望消费者处理在停止时生成的消息,您需要指定一个消费者组名称,例如spring.cloud.stream.bindings.<bindingName>.group=foo。当指定了一个使用者组时,如果具有相同使用者组的客户端已经运行(即我们记录了该使用者消耗的偏移量)或者b){{1指定的值),则应用程序启动a)最新的未使用消息(可以是spring.cloud.stream.binder.kafka.start-offsetearliest,代表主题的开头或结尾)。因此,重新启动保留消费者群体的消费者将从他们离开的地方消费,新消费者将根据启动选项启动。如果未指定组,则消费者将被视为“匿名”,并且只对其启动后生成的消息感兴趣,因此它将始终在分区集的末尾开始。

如果您想绕过已保存的值,则可以使用latest,这将导致客户端重置已保存的偏移并从spring.cloud.stream.binder.kafka.reset-offets=true指示的值开始。

这反映了0.8.2预期的行为(并得到支持)。一旦我们升级到0.9,我们将相应地更新。

答案 1 :(得分:0)

是;默认设置是从主题末尾开始收听。

使用

spring:
  cloud:
    stream:
      binder:
        kafka:
          start-offset: earliest