01 前言
博主习惯每隔一段时间(或是特殊转折点)会整理一下工作的经验。距离上次经验总结(2021.10.26
)已经快两年了,我想这个时候也该整理一下既往工作的事项,看看这段时间积累的一些经验。
02 参与的工作
在这段时间,博主主要负责公司的数据中台的产品,主要有以下几个模块:
- 数据汇聚:主要是离线采集(使用
DataX
)和实时采集(使用Flink
); - 数据开发:主要是
Dag
作业(使用DolphinScheduler
)和实时计算(使用Flink
); - 数据治理:主要是编码标准这一块;
- 管理中心:消息中心、审批中心、资源管理(引擎、工作主机);
- 其它:监控告警以及运维等工作。
该产品应用到了比较多的项目(如:多个政府单位、高校等),对接的厂商有腾讯、华为。
为了方便回顾,根据自己的记忆整理了如下的脑图(脑图没有明确的以某种分类划分,仅做回忆):
03 细节回顾
接下来,针对如上脑图的分类,回顾一下其细节。
3.1 数据汇聚
数据汇聚主要做做了“离线”和“实时”的数据采集这两块。
3.1.1 离线采集
数据汇聚主要使用的框架是DataX
,博主为了接手这一块,曾经深度去学习过DataX
的源码,并开了一个专栏来记录:https://blog.csdn.net/qq_20042935/category_7492977.html。
为了方便回顾,博主整理了如下的流程图:
这一块做得最多的事情是开发reader、writer和transformer,这些都是约定好的了,没啥好深入的,唯一值得有用处的地方便是可以参考其实现,以便快速对接不同的数据源。
3.1.2 实时采集
实时采集是博主初次接触到了Flink
,一开始被上级负责人(后来被调去其它部门了)误导,使用了Java API
的形式,限制了开发的进度,后来改为了Client
模式,才得以使项目进度快速地进行。
只实现了Flink On yarn的模式,其技术实现图如下:
实时采集分为了普通模式和专家模式,普通模式其实就是为了使用户习惯离线采集的新增作业流程,专家模式就是为了使用户使用flink
更加的灵活(即SQL
模式)。我感觉“字段解析”这一块设计得比较人性化,可以拆分(截取)和解析(json
解析)字段。
当然还有flink
的connector
开发花了不少的时间(需要了解其原理),开发的connector
有:
- protobuf-connector:解决protobuf程序的问题、学习到了如何cook代码等技术,感觉这一块非常复杂,flink官网也拉了相关的feature分支,但是都没实现;
- 自定义connector:主要是实现一个伪实时的数据源,里面开启一个定时器,“批”获取增量数据同步,同时需要考虑Checkpoint等细节问题;
- tdsql-cdc-connector:改造mysql-cdc-connector,降级mysql版本,学习到了编码格式化插件spotless等;
- 其它connector:如hudi、ck、kafka,直接打通了对flink的kerberos认证理解。
3.2 数据开发
数据开发我认为是接触的模块中,最为复杂的,主要负责DAG作业开发和实时作业开发(实时计算)这两块。
3.2.1 DAG作业
DAG
作业主要使用的是DolphinScheduler
这个框架,博主也深入过其源码,也写过相关的文章去记录:https://blog.csdn.net/qq_20042935/category_9220608.html
贴上以往整理过得一张分析Task的流程图以便后续回忆:
这也是使用DS的初体验。同时也深入过其api
、master
、worker
的源码,并修复了很多源码的bug,进一步提高了代码的敏感度,虽然某些代码写的很烂,但依然要接受牛粪里找鲜花的触感,分析了代码其实就是分析人的思考过程。
3.2.2 实时计算
实时计算是我在这个部门耗时最多的的一个模块,我主要担任了产品设计、项目管理、开发、测试、上线、运维的职责,相当累,但是也学到了很多的东西。
关于原型,我参考了几个实时计算的平台(vvp、青云、阿里云等),独自整整画了近几百张的图,对原型设计有兴趣的童鞋,可以参考我写过的专栏(https://blog.csdn.net/qq_20042935/category_9823775.html),这里截图留作纪念(这里已经做了模糊处理)
设计完不断地评审,最后还要负责项目的管理,划分项目范围并把控项目的进度时间,这里也较为巧妙的运用的项目管理的知识。有兴趣的可以参考写过相关的专栏:https://blog.csdn.net/qq_20042935/category_9446123.html
到了开发阶段才是最难的,需要参考不少优秀平台的源码,这里就不再详述了,用到了一些逆向以及远程调试的技术。这里贴下开发初期博主画的架构图仅做回忆(某些可能会有些不太对的地方,不过已经完善了):
当然还需要对接腾讯、华为的大数据平台,也做了不少的Flink客户端、认证客户端以及hadoop客户端相关的改造,这也算是一个很好的学习过程。
最后一道工序,测试、上线、运维都需要博主自己来。。。
- 关于测试:博主比较推荐MeterShpere,很遗憾没有推行,并写过相关的文章去介绍(https://blog.csdn.net/qq_20042935/article/details/130887387)
- 关于上线和运维:这里贴下博主画的相关流程图,如下:
图解K8S:
图解DevOps:
通过负责实时计算这一块,算是完整培养了自身的各方面能力了,之前学的理论也得以利用,其实还是挺感谢有这样的经历的。
3.3 数据治理
数据治理也是博主最初接触到的一个模块,当时对这块的知识还是挺模糊的,主要负责的是主数据编码规则管理这一块。博主使用了责任链模式去处理了,这里贴出一个曾经画的简单流程图:
当时也了解了一些数仓分层的概念:
这一块没有过多的参与,所以没什么技术上的认识,最多用到了不同的设计模式。
3.4 管理中心
3.4.1 审批中心
审批中心这一块没啥技术含量的,纯java对接流程中心,进行二次的去封装改造。最后各业务模块去接入。
3.4.2 消息中心
我也是主要负责消息中心这一块(除了原型),为了留作记忆,这里贴上自己画的技术流程图:
这一块很有趣,用到了不少的设计模式(如:工厂、策略等),同时也开发了对接第三方的sdk,以及spring-boot-starter的开发,也算是很纯的微服务架构代码开发吧。
3.4.3 资源管理
资源管理主要是在管理中心分配数据汇聚引擎资源、数据开发工作主机资源,给不同的项目。这一块改造有点复杂,设计改造的源码非常多。原型、开发都是有博主本人一个人做完。因为是疫情,当时也阳了,所以记忆想当时深刻。这里当时也没画图,所以此处就没得贴图用作回忆了。
3.5 其它
剩下的就是一些杂七杂八的事项了,主要是做项目上的一些支撑。
还有就是运维方面的事情,运维的事很多,所以开发也要去承担一些事项,这个过程中,我实际操作了一些云原生相关的组件(如kubernetes
以及其二次封装产品kubesphere
),并写过相关的专栏去记录:https://blog.csdn.net/qq_20042935/category_9220572.html
对于监控告警这一块,博主在实施的过程中,也写过相关的博客记录了,以便回顾:https://blog.csdn.net/qq_20042935/category_9220666.html
还有就是一些大数据相关的部署,如hadoop、cdh等。
04 文末
在这近两年的时间了,可以看到自己在“实时计算”这一块成长是非常快的,不仅同时担任了多个角色,也让理论得以实践。非常感谢之前带过我的大佬(虽然他已经去了别家公司高就了😁)。
博主现在应该也算是处于一个人生的 “转折点”,如何选择?何去何从?一切未知。希望自己可以清晰的认清自己,做出决策,希望未来会越来越好!
本文完!