现象

采集端采集数据之后,输出系统发现系统数据查询不到,排查问题之后发现是接入问题跟治理问题:
1、接入问题
接入的数据如果需要做文件上传的话,需要将其上传到mysql做处理,接入系统跟mysql之间由于网络问题,不能直接交互。中间使用了一个dataMaster做转发。但是转发时候接入系统拉取到一批数据之后,比如100条,除了上报拉取数据记录之外。还需要将一条条数据通过dataMaster转发然后保存到mysql。期间出现部分数据写入失败的情况。
2、治理系统
治理系统数据一直在消费kafka主题数据,但是发现数据存在积压:如下:
image.png

然后查看flink治理程序时候,出现了背压:如下:
image.png
说明算法处理不及时,导致数据处理不过来。

解决方案

1、接入问题

1、接入问题的数据问题,由于之前是接入系统直接写到kafka(此方式比较稳定);现在还是采取将各个渠道的接入数据写到主题为:access_渠道 的主题下。然后通过java程序消费此主题数据,然后写入到mysql数据库存,写入一条数据之后采用主题提交方式提交数据。
2、做一个统计,统计每天采集端有多少数据?然后接入端接入了多少条数据。做一个监控校验。

2、治理问题

已经接入了数据,然后发现是算法背压问题,现在就根据日志分析算法调用情况,做一个算法统计。

k8s服务部署日志查询

进入服务之后,发现我们的服务所在节点在:192.168.58.48上面
image.png

我们进入这台机器,找到对应的日志目录文件。

进入以下目录:
/var/log/containers
扎到对应文件
ll xxx-governance-news-hct-k8s-kafka*

使用grep生成对应文件

Linux tee命令用于读取标准输入的数据,并将其内容输出成文件

sudo grep "耗时" /var/log/containers/gtcom-governance-news-hct-k8s-kafka-taskmanager-1-4_gtcom-governance_flink-task-manager-a69dacf7d3165f57ddbfc7db2fb90c3e6b73d741f1ea6a323f4be2b27b55a904.log | tee algoTimes.log

有时候我们执行上面文件的时候,在当前目录下不会生成一个文件,原因是我们
| tee algoTimes.log是另一个文件,这个文件在当前目录生成没有权限,因为sudo只是对前面一个grep加了权限。所以我们应该将输出的文件目录设置为:

sudo grep "耗时" /var/log/containers/gtcom-governance-news-hct-k8s-kafka-taskmanager-1-4_gtcom-governance_flink-task-manager-a69dacf7d3165f57ddbfc7db2fb90c3e6b73d741f1ea6a323f4be2b27b55a904.log | tee /home/${user}/algoTimes.log

运行上面文件如下展示:
image.png

生成如下文件:

-rw-rw-r--. 1 zyyt zyyt 923705344 10月 30 15:35 algoTimes.log

python数据统计

通过python处理文件:
algo-perf-log.py

具体如下:

#!/usr/bin/env python
# coding:utf-8

import sys
import re
from math import floor

__helper = '''
sudo grep "耗时" /var/log/containers/gtcom-governance-news-hct-k8s-kafka-taskmanager-1-4_gtcom-governance_flink-task-manager-a69dacf7d3165f57ddbfc7db2fb90c3e6b73d741f1ea6a323f4be2b27b55a904.log | head
{"log":"2021-10-30 10:11:05,060 [Legacy Source Thread - Source: 读取Kafka数据 -\u003e String转换为JSONObject -\u003e 格式转换 -\u003e Assign Key To Data (18/21)#0] INFO  com.gtcom.governance.drivers.Processor                       - [messageId=150986]流程[新闻治理流程]阶段[格式转换][数据治理开始][NewsBeginProcessor]处理结果:[SUCCESS],耗时: [3]ms\n","stream":"stdout","time":"2021-10-30T02:11:05.06080345Z"}
{"log":"2021-10-30 10:11:05,063 [Legacy Source Thread - Source: 读取Kafka数据 -\u003e String转换为JSONObject -\u003e 格式转换 -\u003e Assign Key To Data (20/21)#0] INFO  com.gtcom.governance.drivers.Processor                       - [messageId=150965]流程[新闻治理流程]阶段[格式转换][数据治理开始][NewsBeginProcessor]处理结果:[SUCCESS],耗时: [6]ms\n","stream":"stdout","time":"2021-10-30T02:11:05.06388483Z"}

{"log":"2021-10-30 10:11:05,257 [Legacy Source Thread - Source: 读取Kafka数据 -\u003e String转换为JSONObject -\u003e 格式转换 -\u003e Assign Key To Data (18/21)#0] INFO  com.gtcom.governance.drivers.Stage                           - [messageId=150986]流程[新闻治理流程]阶段[格式转换]处理总耗时: [200]ms\n","stream":"stdout","time":"2021-10-30T02:11:05.257418164Z"}
'''

pattern1 = re.compile(r'\[([^\]]+)\]处理结果:\[SUCCESS\],耗时: \[(\d+)\]ms')
pattern2 = re.compile(r'\[算法治理\](处理总耗时): \[(\d+)\]ms')

def percentile(data):
    data.sort()
    N = len(data)
    percents = range(1, 100)
    return ','.join([str( data[int(floor(N * p / 100))]  ) for p in percents])


def get_data():
    d = {}
    for line in sys.stdin:
        m = pattern1.findall(line) or pattern2.findall(line)
        if m :
            n, t = m[0]
            d.setdefault(n, []).append(int(t))
    return d


if __name__ == '__main__':
    rt_data = get_data()
    for algoType in rt_data:
        print('%s,%d,%s' % (algoType, len(rt_data[algoType]), percentile(rt_data[algoType])))

分析:(方法:get_data)
1、for line in sys.stdin:从标准数据流中读取每一条数据。
2、 m = pattern1.findall(line) or pattern2.findall(line):按照规则匹配每一条数据。
3、d.setdefault(n, []).append(int(t)):设置d的每一条数据到集合d中。

分析:(方法:percentile)
1、对数据进行百分比计算。

统计结果校验

1.生产数据

通过python运行我们产生的文本数据。

 cat algoTimes.log | python algo-perf-log.py 

如下所示:
image.png
输出如下信息:
image.png

2.Excel统计

新建一个csv文件:
image.png
然后文本打开:
image.png
打开后将内容数据进去。

最双击222.csv文件后用Excel打开:
选中所有文件:
image.png
生成的文件如下:
image.png
然后去除总结第二列数据:
image.png
生成如下算法结果:
image.png

所以可以判定NewsDataQualityProcessor算法效率比较差。


startshineye
91 声望26 粉丝

我在规定的时间内,做到了我计划的事情;我自己也变得自信了,对于外界的人跟困难也更加从容了,我已经很强大了。可是如果我在规定时间内,我只有3分钟热度,哎,我不行,我就放弃了,那么这个就是我自己的问题,因为你自己...


« 上一篇
Flink-常见问题
下一篇 »
k8s数据持久化