使用Kafka的Spring Cloud Stream - 重新启动使用者后无法读取消息

时间:2017-07-28 18:56:51

标签: spring microservices spring-cloud

我有一个基于微服务的应用程序,它从Kafka主题中读取消息。当服务关闭时,如果主题上有任何消息,我希望消费者在下次启动并运行时读取这些消息。但是当服务停止时,我错过了所有消息。如何让消费者阅读服务停止时未读取的消息?

当我的微服务启动并且任何消息返回主题时,我收到所有消息。

我的application.properties:

spring.cloud.stream.bindings.input.destination=test
spring.cloud.stream.bindings.input.consumer.headerMode=raw
spring.cloud.stream.bindings.input.consumer.startOffset=latest
spring.cloud.stream.bindings.input.consumer.resetOffsets=true
spring.cloud.stream.bindings.input.consumer.instanceCount=3
spring.cloud.stream.bindings.input.consumer.autoCommitOffset=false

//这是我的微服务根目录下的消费者代码

@EnableBinding(Sink.class) 
public class Consumer { 
    @ServiceActivator(inputChannel = Sink.INPUT)
    public void consoleSink(Object payload){
        logger.info("Type: "+ payload.getClass() + " which is byte array");
        logger.info( "Payload: " + new String((byte[])payload));
    } }

我很感激解决这个问题的任何线索。

1 个答案:

答案 0 :(得分:1)

设置以下属性帮助我解决了我的问题。

spring.cloud.stream.bindings.input.destination=test
spring.cloud.stream.bindings.input.consumer.headerMode=raw
spring.cloud.stream.bindings.input.consumer.startOffset=latest
spring.cloud.stream.bindings.input.consumer.resetOffsets=true
spring.cloud.stream.bindings.input.consumer.instanceCount=3
spring.cloud.stream.bindings.input.consumer.autoCommitOffset=false
spring.cloud.stream.kafka.bindings.input.consumer.autoCommitOffset=false
spring.cloud.stream.kafka.binder.autoCreateTopics=false
spring.cloud.stream.bindings.input.group=testGroup50
spring.cloud.stream.bindings.input.partitioned=false

谢谢,

BR