线上kafka事故
起因
之前做了一个app推送,然后加了一个需求就是把用户的推送记录存入ck,但是第二天推送的时候kafka写入ck失败,最后导致整个kafka阻塞了.
排查
本来想找kafka的消费者,发现没有找到,然后同事给了我一个文档,我看完才发现kafka是可以自动导入ck,只要提前创建对应的表就行了。然后我通过日志分析,发现是kafka导入ck的时候字符串转换为int64失败,结合代码,发现我把原本写入kafka的字段强转位int,然后写入ck的时候中间转换为字符串,但是ck要的是int,所以就强转,导致最后出现'"123"'这种情况。原来是ck的字符串是单引号,但是kafka那边拿到的是双引号,导致他没识别出来说字符串,所以在此强转。
解决
- 修改代码,把原本错误的代码删去
- 然后重新建ck的表,让kafka自动导入的时候,强制转换出现错误返回0,这样虽然回损失一部分数据,可以把错误数据给消费掉,恢复kafka的消费能力
收获
- 写代码时候注意检查
- 了解到了kafka怎么导入数据到ck
- 提高了解决问题的能力