你们想知道的都在这里:lacus流程架构分享
-
毛毛小妖的笔记
2023-07-14 22:28:00
-
数据库开发技术
-
原创
后台有好多小伙伴私信我说希望把 lacus 这个项目的流程及架构分享一下。现在,他来了,赶紧把小凳子准备好。
一、lacus 的由来
lacus翻译成中文的意思是湖或者湖泊。他有如下几个寓意:
包容:湖泊很大,海纳百川,大数据技术的包容性很强,只要你有兴趣,他都会一视同仁
活力:湖泊是自然界中充满活力和清新的元素之一,希望我们技术人永远保持活力
探索:湖泊也可以是冒险和探索的地方,希望我们技术人永远保持对新技术的探索和敬畏精神
互动:湖泊通常是人们聚集和社交的地方,希望我们技术人能够毫无保留的将自己的想法互相分享、共同进步
自省:湖泊的镜面反射着周围的景色,象征着内省,作为技术人要时刻自我反省,不断提升技术能力
带着以上美好的愿望,我们开源了lacus 这个大数据平台。尽管目前还存在着或多或少的 bug,目前也仅支持 mysql 到 doris 的数据同步,调度中心目前仅支持 yarn。但是,在未来,随着新的想法不断被发掘并加以实现,以及更多小伙伴的参与,我相信:这个平台会越来越完善,越来越好用。二、整体流程架构
lacus 是基于开源的若依框架为基础打造的,目前开放的功能有:
菜单管理:若依系统内置功能,管理系统的菜单,便于二次开发
系统监控:若依系统内置功能,对系统的硬盘内存等进行监控
元数据管理:管理外部的数据源,提供元数据同步以及数据表、字段的查看功能
数据同步:不同数据源之间的数据同步,主要是将关系型数据库的数据同步到数据仓库中
以上就是lacus系统目前提供的功能模块,目前主要还是为数据同步这块服务的,让我们一起来看看数据同步的整体流程和架构吧。
后台管理:后台管理主要包括任务分组和任务的新增、删除、查询、编辑、启动、停止等操作
任务中心:任务中心主要包括我们将任务提交到后台所发生的一系列动作。当我们将任务通过前端界面提交到后台,我们将调用 yarn 的接口,将任务转化为 flink 任务,提交到 yarn 上。
三、FAQ
1. 前端启动的时候为什么要以分组的形式启动呢?
将任务分组启动是为了节省服务器资源,一个分组下的所有任务将共用一份系统资源。当然了,这种方式也会带来新的问题,分组下的任意一个任务出现问题,所有任务都会受到影响,如果你的服务器资源足够多,可以一个分组下挂1,2个任务,这样将影响降到最低。2. 后台为什么要提交2个 flink 任务?
我们在启动 flink 任务的时候会启动2个,即 source 任务和 sink 任务。
- source 任务使用 flinkCDC 将源端数据采集到 kafka
- sink 任务消费 kafka 数据,并且使用 doris stream load 将数据加载到 doris 数仓中,未来还会支持更多的数仓类型
其实,启动一个 flink 任务,也可以实现源端到目标端的数据同步。
- 一方面是为了解耦,数据打到 kafka 之后,其他系统如果想用这里的数据,会很方便,并且对当前流程没有任何影响
- 另一方面是利用了 kafka 的缓冲作用,可以很大程度上避免 flink 反压的情况
3. 建立数据同步过程任务时,如何指定 flink 运行所需要的 jobManager 和 taskManager 内存?
我们在建立任务分组时,可以对任务分组指定 jobManager 和 taskManager 内存。4. 数据同步过程中,如何进行限流?
我们在建立任务时,会对每个任务设置窗口大小,最大数据条数和最大数据量这三个参数。
窗口大小:为 flink 任务设置滚动窗口的大小,在一个窗口内收集数据,避免大量的入库操作,对数仓造成过大压力
最大数据条数:限制一个窗口中最大的数据条数,当一个窗口中收集的数据条数到达设置的最大数据条数时,将会进行一次入库操作
最大数据量:限制一个窗口中最大数据量,当一个窗口中收集的数据量达到设置的最大数据量时,将会进行一次入库操作
这三个参数并不是独立生效的,其中任意一个条件触发都会进行一次入库操作,以最先到达的触发条件为准。5. 提交 flink 任务时使用的是什么模式?
这里使用的是 flink 的 Application 模式,这个模式的具体操作是:可以预先将 flink jar 包,以及任务依赖的 jar 包和资源文件放到 hdfs 指定目录下。
- 打包任务 jar 包时,将依赖的作用范围设置为 provided,jar 包的体积会极大的缩小,打包时和上传到服务器时会更节省时间
- 提交 flink 任务时,不再从本地下载任务所需的依赖和资源文件,提交任务效率提高了
6. 支持全量和增量数据同步吗?
支持。flinkCDC 提供了全量快照的方式和读取 binlog 日志的方式。当我们使用全量同步时,flinkCDC 会将数据库的数据 dump 下来,组织成 flinkCDC 通用的格式,从而发送到 kafka;当我们使用增量同步时,flinkCDC 会读取源端数据库的 binlog,组织成 flinkCDC 通用的格式,从而发送到kafka。7. 如果我想同步mongoDB的数据,并且同步到iceberg等数据湖中,可以实现吗?
目前平台仅支持 mysql 同步到 doris 的数据同步。如果想将 mongoDB 数据同步到数据湖中,可以进行二次开发,只需要修改 lacus-job 模块即可,只需要遵循 mongoDB 的 flinkCDC 取数写法和数据湖数据写入的语法即可。8. 针对接入任务的相关指标统计如何实现?
目前平台中并未提供这样的统计功能,不过你可以在 flink 官网中找到相应的监控统计接口,并将它集成到你的系统中即可。四、写在最后
目前平台中数据同步的核心功能已经可以使用,但是还有很多锦上添花的功能并未实现,如果你感兴趣,可以随时提issue或者pr,也可以通过下面的微信公众号联系作者加入 lacus 交流群,微信公众号后台回复消息“交流”即可。如果你有好的想法,也欢迎一起交流,我们会在未来的计划清单中添加上。希望通过这篇文章,能够帮助你更好的理解这个平台的作用和意义,也许他并不完善,但是他可能会在你选择数据同步方案时给你一些灵感。