文章目录

  • 01 前言
  • 02 参与的工作
  • 03 细节回顾
  • 3.1 数据汇聚
  • 3.1.1 离线采集
  • 3.1.2 实时采集
  • 3.2 数据开发
  • 3.2.1 DAG作业
  • 3.2.2 实时计算
  • 3.3 数据治理
  • 3.4 管理中心
  • 3.4.1 审批中心
  • 3.4.2 消息中心
  • 3.4.3 资源管理
  • 3.5 其它
  • 04 文末


01 前言

博主习惯每隔一段时间(或是特殊转折点)会整理一下工作的经验。距离上次经验总结(2021.10.26)已经快两年了,我想这个时候也该整理一下既往工作的事项,看看这段时间积累的一些经验。

02 参与的工作

在这段时间,博主主要负责公司的数据中台的产品,主要有以下几个模块:

  • 数据汇聚:主要是离线采集(使用DataX)和实时采集(使用Flink);
  • 数据开发:主要是Dag作业(使用DolphinScheduler)和实时计算(使用Flink);
  • 数据治理:主要是编码标准这一块;
  • 管理中心:消息中心、审批中心、资源管理(引擎、工作主机);
  • 其它:监控告警以及运维等工作。

该产品应用到了比较多的项目(如:多个政府单位、高校等),对接的厂商有腾讯、华为。

为了方便回顾,根据自己的记忆整理了如下的脑图(脑图没有明确的以某种分类划分,仅做回忆):

工作经验小结(2023.11.21)_产品

03 细节回顾

接下来,针对如上脑图的分类,回顾一下其细节。

3.1 数据汇聚

数据汇聚主要做做了“离线”和“实时”的数据采集这两块。

3.1.1 离线采集

数据汇聚主要使用的框架是DataX,博主为了接手这一块,曾经深度去学习过DataX的源码,并开了一个专栏来记录:。

为了方便回顾,博主整理了如下的流程图:

工作经验小结(2023.11.21)_大数据_02


这一块做得最多的事情是开发reader、writer和transformer,这些都是约定好的了,没啥好深入的,唯一值得有用处的地方便是可以参考其实现,以便快速对接不同的数据源。

3.1.2 实时采集

实时采集是博主初次接触到了Flink,一开始被上级负责人(后来被调去其它部门了)误导,使用了Java API的形式,限制了开发的进度,后来改为了Client模式,才得以使项目进度快速地进行。

只实现了Flink On yarn的模式,其技术实现图如下:

工作经验小结(2023.11.21)_工作经验总结_03


实时采集分为了普通模式和专家模式,普通模式其实就是为了使用户习惯离线采集的新增作业流程,专家模式就是为了使用户使用flink更加的灵活(即SQL模式)。我感觉“字段解析”这一块设计得比较人性化,可以拆分(截取)和解析(json解析)字段。

当然还有flinkconnector开发花了不少的时间(需要了解其原理),开发的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这个框架,博主也深入过其源码,也写过相关的文章去记录:

工作经验小结(2023.11.21)_工作经验总结_04

贴上以往整理过得一张分析Task的流程图以便后续回忆:

工作经验小结(2023.11.21)_产品_05


这也是使用DS的初体验。同时也深入过其apimasterworker的源码,并修复了很多源码的bug,进一步提高了代码的敏感度,虽然某些代码写的很烂,但依然要接受牛粪里找鲜花的触感,分析了代码其实就是分析人的思考过程

3.2.2 实时计算

实时计算是我在这个部门耗时最多的的一个模块,我主要担任了产品设计、项目管理、开发、测试、上线、运维的职责,相当累,但是也学到了很多的东西。

关于原型,我参考了几个实时计算的平台(vvp、青云、阿里云等),独自整整画了近几百张的图,对原型设计有兴趣的童鞋,可以参考我写过的专栏(),这里截图留作纪念(这里已经做了模糊处理)

工作经验小结(2023.11.21)_产品_06

设计完不断地评审,最后还要负责项目的管理,划分项目范围并把控项目的进度时间,这里也较为巧妙的运用的项目管理的知识。有兴趣的可以参考写过相关的专栏:

工作经验小结(2023.11.21)_经验分享_07

到了开发阶段才是最难的,需要参考不少优秀平台的源码,这里就不再详述了,用到了一些逆向以及远程调试的技术。这里贴下开发初期博主画的架构图仅做回忆(某些可能会有些不太对的地方,不过已经完善了):

工作经验小结(2023.11.21)_大数据_08


当然还需要对接腾讯、华为的大数据平台,也做了不少的Flink客户端、认证客户端以及hadoop客户端相关的改造,这也算是一个很好的学习过程。

最后一道工序,测试、上线、运维都需要博主自己来。。。

  • 关于测试:博主比较推荐MeterShpere,很遗憾没有推行,并写过相关的文章去介绍()
  • 关于上线和运维:这里贴下博主画的相关流程图,如下:

图解K8S:

工作经验小结(2023.11.21)_大数据_09

图解DevOps:

工作经验小结(2023.11.21)_经验分享_10

通过负责实时计算这一块,算是完整培养了自身的各方面能力了,之前学的理论也得以利用,其实还是挺感谢有这样的经历的。

3.3 数据治理

数据治理也是博主最初接触到的一个模块,当时对这块的知识还是挺模糊的,主要负责的是主数据编码规则管理这一块。博主使用了责任链模式去处理了,这里贴出一个曾经画的简单流程图:

工作经验小结(2023.11.21)_大数据_11


当时也了解了一些数仓分层的概念:

工作经验小结(2023.11.21)_工作经验总结_12


这一块没有过多的参与,所以没什么技术上的认识,最多用到了不同的设计模式。

3.4 管理中心

3.4.1 审批中心

审批中心这一块没啥技术含量的,纯java对接流程中心,进行二次的去封装改造。最后各业务模块去接入。

3.4.2 消息中心

我也是主要负责消息中心这一块(除了原型),为了留作记忆,这里贴上自己画的技术流程图:

工作经验小结(2023.11.21)_工作经验总结_13


这一块很有趣,用到了不少的设计模式(如:工厂、策略等),同时也开发了对接第三方的sdk,以及spring-boot-starter的开发,也算是很纯的微服务架构代码开发吧。

3.4.3 资源管理

资源管理主要是在管理中心分配数据汇聚引擎资源、数据开发工作主机资源,给不同的项目。这一块改造有点复杂,设计改造的源码非常多。原型、开发都是有博主本人一个人做完。因为是疫情,当时也阳了,所以记忆想当时深刻。这里当时也没画图,所以此处就没得贴图用作回忆了。

3.5 其它

剩下的就是一些杂七杂八的事项了,主要是做项目上的一些支撑。

还有就是运维方面的事情,运维的事很多,所以开发也要去承担一些事项,这个过程中,我实际操作了一些云原生相关的组件(如kubernetes以及其二次封装产品kubesphere),并写过相关的专栏去记录:

工作经验小结(2023.11.21)_项目管理_14


对于监控告警这一块,博主在实施的过程中,也写过相关的博客记录了,以便回顾:

工作经验小结(2023.11.21)_工作经验总结_15


还有就是一些大数据相关的部署,如hadoop、cdh等。

04 文末

在这近两年的时间了,可以看到自己在“实时计算”这一块成长是非常快的,不仅同时担任了多个角色,也让理论得以实践。非常感谢之前带过我的大佬(虽然他已经去了别家公司高就了😁)。

博主现在应该也算是处于一个人生的 “转折点”,如何选择?何去何从?一切未知。希望自己可以清晰的认清自己,做出决策,希望未来会越来越好!

本文完!