美文网首页
记一次Flink线上问题排查

记一次Flink线上问题排查

作者: 淡淡的小番茄 | 来源:发表于2021-08-17 14:34 被阅读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增加二级缓存。

    相关文章

      网友评论

          本文标题:记一次Flink线上问题排查

          本文链接:https://www.haomeiwen.com/subject/wjfibltx.html