写点什么

记一次 Kafka 集群的故障恢复

  • 2019-11-20
  • 本文字数:1744 字

    阅读完需:约 6 分钟

记一次Kafka集群的故障恢复

Kafka 集群部署环境

1、kafka 集群所用版本 0.9.0.1


2、集群部署了实时监控: 通过实时写入数据来监控集群的可用性, 延迟等;

Part 1

1 集群故障发生

  • 集群的实时监控发出一条写入数据失败的报警, 然后马上又收到了恢复的报警, 这个报警当时没有重要,没有去到对应的服务器上去看下 log, 恶梦的开始啊~~~

  • 很快多个业务反馈 Topic 无法写入, 运维人员介入

2 故障解决

  • 运维人员首先查看 kafka broker 日志, 发现大量如下的日志:



  • 这个问题就很明了了, 在之前的文章里有过介绍: Kafka 运维填坑, 上面也给出了简单修复, 主要原因是 新版 kafka 客户端 sdk 访问较旧版的 kafka, 发送了旧版 kafka broker 不支持的 request, 这会导致 exception 发生, 然后同批次 select 出来的所有客户端对应的 request 都将被抛弃不能处理,代码在 SocketServer.scala 里面, 大家有兴趣可以自行查阅


1.这个问题不仅可能导致客户端的 request 丢失, broker 和 broker, broker 和 controller 之间的通讯也受影响;’


2.这也解释了为什么 实时监控 先报警 然后又马上恢复了: 不和这样不被支持的 request 同批次处理就不会出现问题;


  • 解决过程:


我们之前已经修复过这个问题, 有准备好的相应的 jar 包;


运维小伙伴开始了愉快的 jar 包替换和启动 broker 的工作~~~~~~

3 集群恢复

  • kafka broker 的优雅 shutdown 的时间极不受控, 如果强行 kill -9 在 start 后要作长时间的 recovery, 数据多的情况下能让你等到崩溃;

  • 集群重启完, 通过 log 观察, ArrayIndexOutOfBoundsException 异常已经被正确处理, 也找到了相应的业务来源;

  • 业务反馈 Topic 可以重新写入;


然而, 事件并没有结束, 而是另一个恶梦的开始

Part 2

1 集群故障再次发生

  • 很多业务反馈使用原有的 group 无法消费 Topic 数据;

  • 用自己的 consumer 测试, 发现确实有些 group 可以, 有些 group 不能消费;

  • 一波不平一波又起, 注定是个不平凡的夜晚啊, 居然还有点小兴奋~~~

2 故障解决

  • 查看 consumer 测试程序不能消费时的日志,一直在重复如下 log:



1.第一条日志 说明 consumer 已经确认了当前的 coordinator, 连接没有问题;


2.第二条日志显示没有 Not coordinator, 对应 broker 端是说虽然 coordinator 确认了,但是没有在这个 coodinator 上找到这个 group 对应的 metada 信息;


3.group 的 metada 信息在 coordinator 启动或__consuser_offsets 的 partion 切主时被加载到内存,这么说来是相应的__consumer_offsets 的 partition 没有被加载;


4.关于 coordinator, __consumer_offsets, group metada 的信息可以参考 Kafka 的消息是如何被消费的?


  • 查看 broker 端日志, 确认 goroup metadata 的相关问题


1.查找对应的__consumer_offsets 的 partition 的加载情况, 发现对应的



2.没有找到下面类似的加载完成的日志:



也没有发生任何的 exception 的日志


3.使用 jstack 来 dump 出当前的线程堆栈多次查看, 证实一直是在加载数据,没有卡死;


现在的问题基本上明确了, 有些__consumer_offsets 加载完成了,可以消费, 些没有完成则暂时无法消费, 如果死等 loading 完成, 集群的消费可以正常, 但将花费很多时间;


  • 为何 loading 这些__consumer_offsets 要花费如此长的时间?


1.去到__conuser_offsets partition 相应的磁盘目录查看,发生有 2000 多个 log 文件, 每个在 100M 左右;


2.kaka 的 log compac 功能失效了, 这个问题在之前的文章里有过介绍: Kafka 运维填坑,


3.log compact 相关介绍可以参考 Kafka 的日志清理-LogCleaner


  • 手动加速 Loading:


即使 log cleaner 功能失败, 为了加速 loading, 我们手动删除了大部分的 log 文件; 这样作有一定风险, 可能会导致某些 group 的 group metadata 和 committed offset 丢失, 从而触发客户端在消费时 offset reset;

3 故障恢复

  • 所有__consumer_offset 都加载完后, 所有 group 均恢复了消费;

总结

  • 对实时监控的报警一定要足够重视;

  • 更新完 jar 包, 重启 broker 时, 三台存储__consumer_offsets partition 合部同时重启,均在 Loading 状态, 这种作法不合适,最多同时重启两台, 留一台可以继续提供 coordinattor 的功能;

  • 加强对 log compact 失效的监控, 完美方案是找到失效的根本原因并修复;


本文转载自公众号 360 云计算(ID:hulktalk)。


原文链接:


https://mp.weixin.qq.com/s/_n7kGByxoJRkLVQpVYcPGg


2019-11-20 13:052381

评论

发布
暂无评论
发现更多内容

继linux命令之后,我又给你们整理了网络命令归纳,快给我来收藏

北游学Java

Linux 网络协议 网络 网络层

【领福利啦】广受欢迎的人工智能实战课程+“智能音箱”教程免费领!

小冬

人工智能 技术 福利 项目实战 智能音箱

一文带你了解两种Transformer文字识别方法

华为云开发者联盟

人工智能 AI 文字识别

深入内核,拒绝蒙圈!阿里巴巴一位P7级架构师总结整理的这份《Java架构成长笔记》彻底火了。

Java架构之路

Java 程序员 架构 面试 编程语言

食堂就餐卡系统设计

我们新四军不拿群众一针一线

分享一份大佬的MySQL数据库设计规范,值得收藏

小Q

学习 架构 面试 JVM 多线程

美团架构师总结整理的这份GitHub标星150K+的神仙笔记,我花了两个月肝完成功面进了阿里定级P7,现在分享出来希望大家也能有所提升!

Java架构之路

Java 程序员 架构 面试 编程语言

架构师训练营第一周架构方法学习总结

Geek_xq

腾讯云数据库登陆印尼,金融行业显神威

数据君

tdsql

秋招offer收割机——后台服务器开发方向(专业学习路线图总结)

程序员小灰

c++ Linux 后台开发 架构师 服务器端开发

谈谈持续集成、持续交付和持续部署三者究竟是什么,有何联系和区别呢!

ShenDu_Linux

Linux 持续集成 架构师 持续交付 持续部署

如何保障企业数据资产的全生命周期安全?看这篇就够了

华为云开发者联盟

数据 数据资产 数据安全

ThinkPad X1 Carbon与MacBook有何不同?不止是专业

E科讯

如何保护视频资源?这几个防盗链使用技巧你一定要知道!

腾讯云音视频

音视频 防盗链 内容安全 视频防盗 视频资源防盗

有了它,数据库也能空中加油,一边迁移一边跑起来

数据君

【得物技术】供应链库存幂等实战分享

得物技术

幂等 供应链 得物技术部 实战 得物

技术实践丨基于MindSpore框架Yolov3-darknet模型的篮球动作检测体验

华为云开发者联盟

AI 华为云 modelarts

没想到我费劲心力学的kafka,还不如阿里大佬整理的这份学习手册,真的是差距啊

小Q

Java kafka 学习 架构 面试

Week1 命题作业

J

极客大学架构师训练营

《迅雷链精品课》第八课:迅雷链多链结构

迅雷链

区块链

涨薪神作!华为内部操作系统与网络协议笔记爆火,这也太香了吧

Java架构之路

Java 程序员 架构 面试 编程语言

架构师训练营 -week10-总结

大刘

极客大学架构师训练营

去“测试”下的测试重生,不为焦虑买单

陈磊@Criss

软件测试 自动化测试 测试开发 智能化测试

11.11数据可视化大屏设计揭秘

京东科技开发者

大数据 AI 数据分析 数据可视化 交互设计

通过python基于netconf协议获取网络中网元的配置数据,助力企业网络控制自动化轻松实现!

华为云开发者联盟

通信 企业 网络自动化

区块链数字版权应用落地开发,区块链版权溯源解决方案

13530558032

最详细的Linux TCP/IP 协议栈源码分析

linux大本营

Linux 后台开发 网络编程 C/C++ TCP/IP

索引为什么能提供查询性能...

小林coding

MySQL 索引 数据结构与算法 B+树

架构师训练营第一周UML图

Geek_xq

一周信创舆情观察(11.16~11.22)

统小信uos

从数据库巨人身上撕开一道口子

数据君

记一次Kafka集群的故障恢复_文化 & 方法_扫帚的影子_InfoQ精选文章