startOffset与resetOffsets
在使用Kafka作为消息中间件时,我们可以指定kafka消费端参数auto.offset.reset控制消费端如果没有初始消费位移时,是从最新消息开始消费,还是从最早消息开始消费。在Spring Cloud Stream中如果我们要控制Kafka客户端消费没有初始位移时的消费逻辑可以通过startOffset与resetOffsets进行设置。下文基于spring-cloud-stream-binder-kafka 2.0.1.RELEASE版本
kafka消费端参数配置地址:http://kafka.apache.org/documentation/#consumerconfigs
startOffset与resetOffsets源码解析
KafkaConsumerProperties
KafkaConsumerProperties提供Kafka消费端配置参数,startOffset、resetOffsets属于其中一部分
spring-cloud-stream-binder-kafka对startOffset处理
KafkaMessageChannelBinder中通过createKafkaConsumerFactory方法构造Kafka消费端工厂时会从ExtendedConsumerProperties获取额外消费端配置,此处即是KafkaConsumerProperties,获取startOffset,并将startOffset设置到props(Map类型)中,key为auto.offset.reset
spring-cloud-stream-binder-kafka对resetOffsets处理
创建消费端点时,会从KafkaConsumerProperties获取resetOffsets,并且还会获取startOffset,当resetOffsets为true则startOffset配置生效,否则不做任何处理
总结
spring-cloud-stream-binder-kafka 2.0.1.RELEASE版本如果要使startOffset生效需要开启resetOffsets