现象:
某个客户要求审计日志用kafka的方式传输给他们,使用了第三方的librdkafka库来开发。
往客户提供的kafka服务器上的一个topic发送数据,这个topic有三个分区,客户反馈接收到的数据和发送端发送的实际数量对不上,他们只有一个分区接收到了数据,其他两个分区没有接收到。
以下是客户提供的截图证据:
排查:
1
生产者用到是轮询的方式发送给客户的,但由于再和客户排查时用的是公司产品的抓包工具且抓包失败了导致并不清楚这一次的原因
2
而后客户将topic(DLP)改为单分区后,发送端的生产者再次发送数据,这一次是正常。
3
虽然开发了kafka生产者发送数据(客户端),但因为没有接触过kafka服务器,不了解工作原理,排查全靠google。最后没办法,要求客户恢复成3分区再排查看下,客户重新建一个新的topic(DLP3P)并且是3个分区的。
联调抓包发现一切正常。生产者发送了9条数据,客户接收端收到了9条数据,且三个分区各3条,符合轮询规则,顺序也吻合。
抓包结果如下:
至此问题就没有再出现了,所以这里只是记录这个现象。从2023.3月出现该问题,在排查时新建了topic后无问题,抓包都正常,到现在2024.6.27客户都没在反馈过该问题
总结:
发送端的生产者是轮询的发送机制发送数据,客户的kafka服务器的某个topic有三个分区,客户反馈只有一个分区收到数据,其他分区没有,客户质疑是我们的轮询机制有问题。所以我要求客户重建了新的topic,也是三个分区,这个时候接收却正常了,三个分区都可接收数据也确实是按照轮询的方式接收到的。而此后1年多也未反馈过这个问题复现。
所以虽然不太了解kafka服务器的相关工作原理,我仍然觉得这更可能是一个服务端的bug,因为在其他多个(最少4个我知道的)现场使用kafka生产数据也是轮询机制,但其他客户没有反馈过这种问题。
问题虽解决了,但是很可惜未找到根本原因。重建了新的topic后问题就算是被解决了。如果有大佬恰好看到这里,可以留言指点下我,看看可能是什么原因导致的