你们想知道的都在这里:lacus流程架构分享

后台有好多小伙伴私信我说希望把 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 中间件,目的有2个:
  1. 一方面是为了解耦,数据打到 kafka 之后,其他系统如果想用这里的数据,会很方便,并且对当前流程没有任何影响
  2. 另一方面是利用了 kafka 的缓冲作用,可以很大程度上避免 flink 反压的情况

3. 建立数据同步过程任务时,如何指定 flink 运行所需要的 jobManager 和 taskManager 内存?

我们在建立任务分组时,可以对任务分组指定 jobManager 和 taskManager 内存。

4. 数据同步过程中,如何进行限流?

我们在建立任务时,会对每个任务设置窗口大小最大数据条数最大数据量这三个参数。
  • 窗口大小:为 flink 任务设置滚动窗口的大小,在一个窗口内收集数据,避免大量的入库操作,对数仓造成过大压力
  • 最大数据条数:限制一个窗口中最大的数据条数,当一个窗口中收集的数据条数到达设置的最大数据条数时,将会进行一次入库操作
  • 最大数据量:限制一个窗口中最大数据量,当一个窗口中收集的数据量达到设置的最大数据量时,将会进行一次入库操作
这三个参数并不是独立生效的,其中任意一个条件触发都会进行一次入库操作,以最先到达的触发条件为准。

5. 提交 flink 任务时使用的是什么模式?

这里使用的是 flink 的 Application 模式,这个模式的具体操作是:可以预先将 flink jar 包,以及任务依赖的 jar 包和资源文件放到 hdfs 指定目录下。
这个模式的好处是:
  1. 打包任务 jar 包时,将依赖的作用范围设置为 provided,jar 包的体积会极大的缩小,打包时和上传到服务器时会更节省时间
  2. 提交 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 交流群,微信公众号后台回复消息“交流”即可。如果你有好的想法,也欢迎一起交流,我们会在未来的计划清单中添加上。
希望通过这篇文章,能够帮助你更好的理解这个平台的作用和意义,也许他并不完善,但是他可能会在你选择数据同步方案时给你一些灵感。


                               


                               



请使用浏览器的分享功能分享到微信等