记一次Flink线上问题排查

2021-08-17  本文已影响0人  淡淡的小番茄

背景

我们基于Flink SQL及Table API实现数据转发的功能,晚上8点左右发现数据Kafka中数据积压严重。导致数据转发到SaaS系统,数据延长大。由于是生产环境,我们需要需要快速恢复,并定位出问题。

查询规则Job运行状态

通过Flink控制台查询此租户落在的job的运行情况,发现job正常运行,只是消费kafka消息比较慢。一并登录kafka机器,查看分组的消费情况,发现LAG严重,达到5,6万。再查询我们数据转发的日志表,发现数据时间和规则处理时间相差5,6分钟以上。断定:由于job消费慢,导致数据积压。

问题处理

通过Flink控制台查询此job涉及到的规则SQL数,发现达到20几个。查询了job相关的规则创建时间。未发现最近时间创建的。都是1个月之前的数据。然后我们分两步走:

1、减少规则数,快速恢复业务

将本账户所在JOB的其他规则信息禁用,然后重新本job,将规则数从20几个降为10个。然后观察LAG有明显好转。业务在趋向恢复。

2、查询相关的job涉及到的组件监控

vm、redis、kafka。

##kafka监控

下午4点,消息上报数量增加,由之前的50到目前的100。然后Flink消费有积压,LAG持续增大。

##redis监控

reds的访问评率持续升高,和flink、kafka完全对应起来。

##VM监控

Flink job所在机器内存充足。网络带宽占用有所上升。

#排查redis访问量骤升问题

然后我们看到redis升的比较快,想查看那些操作比较频繁及响应的慢查询。

##慢查询

slowlog get 10

查看最近10条的慢查询。通过此命令可以看到执行慢的命令。

##监控

通过monitor命令,redis日志全部打印出来,有时间,来源ip,来源端口,操作函数,操作key。我们可以基于这些日志对当前redis使用情况进行统计分析。命令如下:

./redis-cli -c -p 7000 -a passwd123 monitor >>monitor.log

监控时间根据实际业务量来设置,一般30秒就可以了。

结论

我们通过monitor.log中的ip信息,能判断出骤增的操作都是规则job发起的,结合转发逻辑。已经能定位出具体原因:规则job中有大量访问redis的操作,规则越多访问次数越多。我们在数据处理的时候存在redis读放大的问题。一个规则执行的时候,需要查询5次左右的redis,假如100个规则,则要500次redis查询。问题已定位出来,相应的优化方案也就很明了:

1、减少redis交互次数。

2、访问redis增加二级缓存。

上一篇下一篇

猜你喜欢

热点阅读