Kafka报错:Magic v1 does not support record headers

测试环境中出现Kafka消息发送失败,错误提示指向版本不兼容或请求头问题。经过排查,发现并非版本不兼容,而是由于Sleuth在请求头中添加了X-B3-SpanId导致。移除该头后恢复正常。问题通常由版本不匹配或额外参数引起,解决方案包括检查版本兼容性和避免添加不兼容头。
摘要由CSDN通过智能技术生成

今天测试环境出现了一个Kafka发送消息的问题,排查了好长时间才解决,记录一下

问题症状

测试环境突然出现发送Kafka消息失败的错误,错误截图如下:

在网上查一下,很多人都说是Kafka服务端和客户端的版本不兼容导致了报错,于是朝着这个方向去排查问题

服务端版本确认

找运维的同学确认是否动过服务端的Kafka版本,因为之前一直正常运行了很长时间,今天突然出现了这个问题,肯定是有人动过什么东西。
运维的同学确认没有动过服务端的Kafka版本,服务端版本问题排除

客户端版本确认

查找git提交记录,看是否有研发的同学修改过Kafka客户端的版本,最后也发现没有修改过版本,那就尴尬了。客户端和服务端都没有动过版本,那为啥会报这个错误呢?之前运行过很长时间,说明版本肯定是兼容的,今天突然出现问题肯定还是有人动了什么东西

找到真凶

在排除服务端和客户端版本不兼容的问题后,就试着看了一下报错处的源码

 else if (this.magic < 2 && headers != null && headers.length > 0) {
        throw new IllegalArgumentException("Magic v" + this.magic + " does not support record headers");
 } 

从源码可以看出来,除了判断版本以外,还进行了headers的判断,说明发送的消息必须带了请求头才会报这个错误,但奇怪的是我们在发送消息给Kafka的时候并没有添加请求头,这说明有额外的东西在往请求里面添加请求头,才导致了这个问题

发现网上也有人提到请求头里面带了参数,才会导致这个问题,比如:https://www.jianshu.com/p/80ca3ade8fb2

问题到这里似乎有些眉目了,应该是某些应用在请求里面强行加了参数,于是断点代码找到发现是在header中添加了X-B3-SpanId,查了下发现是sleuth在header中添加了X-B3-SpanId,来实现微服务跟踪,下了这个,马上就恢复正常了。

总结

当出现这个问题时,一般会有两个原因

1.在搭项目框架的时候出现这个问题,那大概率是因为版本的原因

2.如果你是在运行比较久的系统里面突然出现了这个问题,那大概率是因为你在头部加了某些参数,当然在头部加参数也是可以通过升级Kafka版本来解决的,只是如果你的版本刚好不支持,就可以从这方面找一下原因

参考了:https://blog.csdn.net/pzjtian/article/details/108300631

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值