问题描述:代码上线后第二天,用户告警信息没有发送到平台,告警数据丢失。

初步排查问题原因:kafka生产者向topic发送消息时阻塞,生产消息失败,kafka没有任何报错信息,公司kafka服务和java程序分别部署在两台不同华为云机器

尝试解决方法:

1、回滚最新上线的代码 --问题没有解决

2、查看错误日志,修改kafka配置,重启服务,验证利用kafka 自己的生产端可以成功推送消息到topic

3、重新验证 通过java api推送消息仍然失败

4、考虑可能是华为云网络问题,将kafka和java代码部署到同一台机器,仍然发送失败

5、最后确实想不到哪里出现了问题,检查自己的代码,发现用于分区的代码:VehiclePartitioner.java 有这样一个获取随机数的方法,网上搜索这个方法发现了向kafka发送失败是由于SecureRandom.getInstanceStrong()引发的线程阻塞导致,最后改用java自身的Random方法生成随机数问题解决,具体SecureRandom.getInstanceStrong()导致线程阻塞原因,可以参考原博主写的这边博客:https://blog.csdn.net/weixin_45244678/article/details/106137948

kafka消息推送测试(华为云KafkaTemplate向topic发送消息失败线上问题解决)(1)

,