我一直在玩spring-cloud-stream(1.0.0.BUILD-SNAPSHOT和kafka binder),并注意到消费者离线时,发送的任何消息都会丢失。当我启动消费者时,它不会处理发送给kafka的积压请求。这是故意的吗?
答案 0 :(得分:4)
我们肯定需要改进我们的文档,但这里有一些指示。
如果您希望消费者处理在停止时生成的消息,您需要指定一个消费者组名称,例如spring.cloud.stream.bindings.<bindingName>.group=foo
。当指定了一个使用者组时,如果具有相同使用者组的客户端已经运行(即我们记录了该使用者消耗的偏移量)或者b){{1指定的值),则应用程序启动a)最新的未使用消息(可以是spring.cloud.stream.binder.kafka.start-offset
或earliest
,代表主题的开头或结尾)。因此,重新启动保留消费者群体的消费者将从他们离开的地方消费,新消费者将根据启动选项启动。如果未指定组,则消费者将被视为“匿名”,并且只对其启动后生成的消息感兴趣,因此它将始终在分区集的末尾开始。
如果您想绕过已保存的值,则可以使用latest
,这将导致客户端重置已保存的偏移并从spring.cloud.stream.binder.kafka.reset-offets=true
指示的值开始。
这反映了0.8.2预期的行为(并得到支持)。一旦我们升级到0.9,我们将相应地更新。
答案 1 :(得分:0)
是;默认设置是从主题末尾开始收听。
使用
spring:
cloud:
stream:
binder:
kafka:
start-offset: earliest