当前位置: 首页 > 科技观察

记一次生产 Kafka 挂掉的那几分钟

时间:2023-03-19 18:49:45 科技观察

还记得Kafka在生产中一次挂掉的几分钟转载本文请联系Java极客技术公众号。大家好,我是阿芬。作为一个后端工程师,不经历几次生产事故怎么可能成长!这几年,阿芬经历了很多大大小小、大不小的意外,损失了几十次。当然,也有一些对业务没有影响但不应该发生的事情。每一次意外都是一次成长,而阿芬能从每一次意外中学到很多东西,不仅是解决问题,更重要的是对帮助在线有更深的敬意!背景上周下午两点,阿芬悠闲地敲代码,偶尔看到报警机器人发来的几条关于Kafka集群负载高的报警信息,一看负载就高了只是没太在意,何况这个点不是高峰期,我觉得过段时间应该就好了。谁知道一会就恢复不了了,而且越来越多,赶紧拿着电脑跑到运维部看看是怎么回事。我不知道我是否没有看到它。当我看到它时,我感到震惊。集群中某个topic的数据无法写入!但是producer没有报错,貌似还在正常写入,但是集群报错,consumer没有消费。到数据。报错内容如下:[2020-10-2815:12:32,923]ERROR[KafkaApi-2]Errorwhenhandlingrequest{replica_id=-1,max_wait_time=500,min_bytes=1,topics=[{topic=xxxx,partitions=[{partition=0,fetch_offset=409292609,max_bytes=1048576}]}]}(kafka.server.KafkaApis)java.lang.IllegalArgumentException:Magicv1doesnotsupportrecordheaders看到这个程序肯定没有问题,因为最近没有升级,正在尝试重新启动集群和服务,但问题仍然存在。这个时候为了保证业务的稳定,考虑到这个topic可能有问题,所以决定删除这个topic,然后自动重新创建。虽然会丢失一些数据,但不会有太大的影响。但是,如果服务写了很长时间不输入数据,那就更严重了。嗯,我们的服务是基于Nacos做的服务配置和发现。在Nacos中修改Kafka集群配置,暂时切换到其他集群,然后重启服务,因为我们没有让Nacos配置自动生效。切换后,数据正??常写入新集群,然后手动删除旧集群中的错误topic。删除错误主题后,集群正常,没有出现上述错误。现在没有报错,通过修改Nacos将集群配置切换回来,一切正常。整个事件从发现到解决大约用时20分钟,但由于一开始忽略了告警信息,影响了将近一个小时的数据。幸运的是,这些数据不会对在线业务本身产生重大影响,并且通过切换到临时集群并记录数据,您可以取回一部分。看完点评,主要总结了以下几点,分享给大家,共勉:敬畏网络环境!尽快查看线上环境告警信息,确保没有问题!保证线上数据安全,及时备份和切换临时环境(这个block一定要动态配置,发布过程不要慢,推荐Nacos);回顾之后,回顾一下整个处理过程,哪些地方可以优化,哪些地方不对浪费时间,下次见能不能快速解决问题。在生产中时间就是金钱,事故每多一分钟就意味着更多的风险,有时一分钟可以改变很多事情。网上的以上错误大多是版本冲突,但是阿粉没有升级,所以这个问题比较玄学。综上所述,遇到问题并不可怕。谁也不能保证服务不会出问题。我们要做的就是遇到问题要沉着冷静,想好应对策略,在最短的时间内想出最好的解决方案,降低风险和损失才是最重要的。另外,我们要懂得尊重在线,尤其是那些非常重要的业务,否则一旦出现问题,后果会很严重。最后,我邀请你加入我们的知识星球,这里有1800+优秀的人与你一起进步。如果你是新手,稳赚不赔,和你分享很多行业经验和干货;如果你是老板,可以进来一起交流分享经验。说不定以后我们可以合作,给你人生多一种可能。