女主宣言

本文是作者根据实际经验总结出的关于Kafka集群的故障恢复相关的总结,希望对大家有所帮助。

PS:丰富的一线技术、多元化的表现形式,尽在“HULK一线技术杂谈”,点关注哦!

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同批次处理就不会出现问题;

● 解决过程:

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

  2. 运维小伙伴开始了愉快的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:

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

3

故障恢复

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

总结

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

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

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

HULK一线技术杂谈

由360云平台团队打造的技术分享公众号,内容涉及云计算、数据库、大数据、监控、泛前端、自动化测试等众多技术领域,通过夯实的技术积累和丰富的一线实战经验,为你带来最有料的技术分享

记一次Kafka集群的故障恢复相关推荐

  1. 记一次kafka集群频繁crash的排查过程

    01 概述 kafka集群中的某些broker会随机重启,并且重启没有什么规律.broker重启对于client端使用层面是无感知的,但是在数据一致性.稳定性方面存在风险.broker重启时,连接在这 ...

  2. k8s kafka集群 连接不上_图解 K8s 核心概念和术语

    我第一次接触容器编排调度工具是 Docker 自家的 Docker Swarm,主要解决当时公司内部业务项目部署繁琐的问题,我记得当时项目实现容器化之后,花在项目部署运维的时间大大减少了,当时觉得这玩 ...

  3. 记学编程以来第一次找错费时一天的经历——kafka集群创建主题时报错

    错误如下: Exception in thread "main" joptsimple.UnrecognizedOptionException: bootstrap-server ...

  4. zookeeper + kafka集群搭建详解

    文章目录 一.消息队列介绍 1.1 为什么需要消息队列 (MO) 1.2 使用消息队列的好处 (1)解耦 (2)可恢复性 (3)缓冲 (4)灵活性 & 峰值处理能力 (5)异步通信很多时候,用 ...

  5. Kafka集群在马蜂窝大数据平台的优化与应用扩展

    导读 Kafka 是当下热门的消息队列中间件,它可以实时地处理海量数据,具备高吞吐.低延时等特性及可靠的消息异步传递机制,可以很好地解决不同系统间数据的交流和传递问题. Kafka 在马蜂窝也有非常广 ...

  6. mysql gtid 还是pxc_记一次 PXC 集群拆分引发的思考

    原标题:记一次 PXC 集群拆分引发的思考 作者简介 冷正磊 2018年2月加入去哪儿网 DBA 团队,主要负责机票业务的 MySQL 和 Redis 数据库的运维管理工作,以及数据库自动化运维平台部 ...

  7. Kafka 集群在马蜂窝大数据平台的优化与应用扩展

    Kafka 是当下热门的消息队列中间件,它可以实时地处理海量数据,具备高吞吐.低延时等特性及可靠的消息异步传递机制,可以很好地解决不同系统间数据的交流和传递问题. Kafka 在马蜂窝也有非常广泛的应 ...

  8. java kafka 集群消费_kafka集群搭建和使用Java写kafka生产者消费者

    转自:http://chengjianxiaoxue.iteye.com/blog/2190488 1 kafka集群搭建 1.zookeeper集群 搭建在110, 111,112 2.kafka使 ...

  9. 打造全球最大规模 Kafka 集群,Uber 的多区域灾备实践

    - Uber 的 Kafka 生态系统 - Uber 拥有世界上最大的 Kafka 集群,每天处理数万亿条消息和几个 PB 的数据.如图 1 所示,Kafka 现在成了 Uber 技术栈的基石,我们基 ...

最新文章

  1. 测试工具–super-mack
  2. WritableComparable排序案例(全排序)
  3. 0006-ZigZag Conversion(Z 字形变换)
  4. 【渝粤教育】 国家开放大学2020年春季 1192高层建筑施工 参考试题
  5. 什么是透明传输 点对多传输? 它们有哪些经典应用和优势特点
  6. 浏览器存储,储存,Cookie,WebStorage,IndexedDB
  7. java兵乓球队问题_Java两个乒乓球队比赛名单问题(判断素数)
  8. android双usb麦克风,USB麦克风24bit192K单麦芯片方案-SSS1630
  9. 【学生网页设计作业源码】基于HTML+CSS+JavaScript简单的大学生书店(13个页面) 二手书店电子商务网站模板源码
  10. 安装Go语言开发工具
  11. 在新加坡工作会是一个什么体验
  12. 千万不要急着 返城上班!
  13. 解决SQL Server日志空间满的方法
  14. 实训日记(二)——分镜
  15. 中国目前的人工智能在全球处于什么水平?
  16. 东南大学 通信工程/电子信息工程 院校分析 通信保研面试重点问题
  17. Java语言西安交大高起专_2018年西安交大网络学院高起专/本英语入学考试复习题...
  18. c语言 10 9-8 7-6… 1循环语句,C语言学习与总结---第五章:循环结构程序设计
  19. 和别人发生矛盾怎么办?一个故事醒悟
  20. python期末考试重点_Python期末复习笔记

热门文章

  1. SpringBoot开发Restful接口
  2. if函数判断单元格颜色_excel中的if函数,实现自动判断
  3. 推荐一款 IDEA 神器 ,人工智能帮你写代码,再也不用加班了!!
  4. macbook air可以运行c语言吗,新 MacBook Air 现场上手:它让 MacBook 变得有点尴尬了...
  5. JAVA String类特点
  6. 理解 invokedynamic
  7. 适合新手学习的laravel接入微信接口,实现微信公众号二次开发
  8. 点赞功能设计,网上的,留个底
  9. Java重写方法与初始化的隐患(转)
  10. 如何让HTML在手机上实现直接拨打电话以及发送短信?