c++排查线程hang住_Kafka学习笔记之kafka高版本Client连接0.9Server引发的血案排查 - 时光飞逝,逝者如斯...

0x00 概述

kafka server虽然原则上是兼容详细的client,但只是高版本的Server端兼容低版本的Client端;

在有高版本Client端连接时,会导致低版本Server集群会hang住,严重的话直接导致 kafka broker进程僵死,同时也会导致其他的客户端僵死。

0x01 案发现场

 生产端疯狂告警

在一个月黑风高的夜晚,我们kafka生产端开始疯狂告警,出现大量程序队列堵塞、数据写入失败、写入性能下降的告警。

我们先看看生产端程序的日志:

e93906fd36088eac4ec26e7a8ead42b1.png

 在生产端采用参数调优、增大并发、服务重启等一系列手段而无果后,我们将问题排查锁定在后端kafka集群。

 集群异常日志与分析

我们看到服务端频繁有如下异常日志:

3f95ee1bf77012d1c775bdb48566dfa2.png

 从google的信息来看,可能是由于高版本的客户端连接集群而发送了kafka服务端不支持的请求。

0x02 问题追踪与解决

 开启Trace日志

正常日志级别下,日志是比较稀疏,我们把异常前一条相关日志的消费组提取出来进行分析,发现其完全是一个正常版本的客户端。且其日志时间与异常日志时间间隔较大(约7s),直接相关性不大。

27def1a4ad6d04f926e686b943fd0840.png

 快速瞄了kafka服务端的源码得知: 想要精确查询到每个request日志需要开启trace日志。如图修改配置文件:

d6a79c03e1366c0bf7386bc3d082b14a.png

日志分析

我们检索日志,进行分析

7fa04f75a413e96ef1a21765d56f97be.png

 事后复盘时发现从日志排查这类问题更方便一些

 寻找异常任务

我们通过来源连接的ip与端口,定位到对应storm任务的日志,果然存在高版本客户端连接的问题。且任务启动时间与数据写入异常时间点完全吻合。

a280c931bced4cacae5f7248bc0bd1a8.png

 kill任务后集群逐渐恢复,数据写入恢复正常。

0x03 深入分析

现场临时恢复了,但我们对问题深入的分析才刚刚开始。

既然问题源自异常连接,那我们首先需要回顾一下kafka的网络通信模型。

 kafka的网络通信模型

熟悉kafka的同学都知道,kafka的网络通信模型是1(1个Acceptor线程)+N(N个Processor线程)+M(M个业务处理线程)。

线程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值