SCDF 1.3与Kafka_2.11-0.10.1.0兼容问题及报错咨询
解决Spring Cloud Stream 2.x与Kafka 0.10.1.0的
Magic v1 does not support record headers报错 这个问题我之前碰到过,核心原因是你使用的time-source-kafka:2.0.0.BUILD-SNAPSHOT属于Spring Cloud Stream 2.x版本,该版本的Kafka Binder默认会发送带有记录头(Record Headers)的v1格式消息,但你的Kafka集群版本kafka_2.11-0.10.1.0对v1格式的headers支持存在兼容性问题,最终抛出这个异常。
下面是具体的解决方案:
方案1:强制使用v0消息格式(无headers)
在你的time-source应用配置文件(如application.yml或application.properties)中添加以下配置,强制使用不包含headers的v0消息格式,和旧版Kafka兼容:
YAML格式:
spring: cloud: stream: kafka: binder: configuration: message.format.version: 0.10.0.0 value.serializer: org.apache.kafka.common.serialization.StringSerializer key.serializer: org.apache.kafka.common.serialization.StringSerializer
Properties格式:
spring.cloud.stream.kafka.binder.configuration.message.format.version=0.10.0.0 spring.cloud.stream.kafka.binder.configuration.value.serializer=org.apache.kafka.common.serialization.StringSerializer spring.cloud.stream.kafka.binder.configuration.key.serializer=org.apache.kafka.common.serialization.StringSerializer
方案2:部署流时直接传递配置参数
如果你不想修改源码或应用配置,可以在SCDF部署流的时候,直接给time-source传递兼容配置:
stream deploy --name time-log --properties "app.time.spring.cloud.stream.kafka.binder.configuration.message.format.version=0.10.0.0"
方案3:升级Kafka版本(彻底解决)
Spring Cloud Stream 2.x官方推荐的最低Kafka版本是0.10.2.0,如果条件允许,把你的Kafka集群升级到0.10.2.0及以上版本,就能原生支持v1格式的消息headers,从根本上避免这类兼容性问题。
内容的提问来源于stack exchange,提问作者ka2
相关产品推荐
相关产品推荐

