前言:该博客主要是记录自己学习的过程,方便以后查看,当然也希望能够帮到大家。
生产故障-Kafka分区不平衡
故障描述:有个别服务的数据有部分没有上报,导致推荐页展示过期已删除的文章,业务端重新上报时,发现上报的数据迟迟没有送到指定服务,经过观察日志发现,kakfa的消息延迟了7个小时左右
定位原因:
- 指定服务为单节点部署,所在的机器负载基本是满的
处理过程:
- 将该服务改为多节点部署,发现只有一个节点能正常消费,其他节点都在空等待状态,定位出的原因为:该topic的分区只有一个,所以同一消费组,只能被一个节点进行消费
- 重建topic,改为12个分区后,再观察情况发现:每个分区的消息不平衡,有很多分区的消息数为0,经查验资料后发现: 如果key的值不为空,会根据key的值hash后分配到分区,也就是说相同的key,会分配到同一个分区上,最后去掉生产者的key得以解决
解决方案:
- 确保kafka分区的数量超过同消费组内节点的数量
- 不同业务的topic要隔离开来,不要互相干扰
- 对消息积压情况进行告警,比如大数据只能延迟 5 分钟,业务数据延迟控制在秒内
- kafka的key不为空时,会根据key hash后路由到分区,要对key的命名使用注意
后记:本次分享到此结束,本人水平有限,难免有错误或遗漏之处,望大家指正和谅解,欢迎评论留言。
网友评论