1 - Apache InLong 简介
1.1 项目简介
InLong 官网 的介绍:
Apache InLong(应龙)是一个一站式的海量数据集成框架,提供自动、安全、可靠和高性能的数据传输能力,方便业务构建基于流式的数据分析、建模和应用。
该项目最初于 2019 年 11 月由腾讯大数据团队捐献到 Apache 孵化器,2022 年 6 月正式孵化毕业,成为 Apache 顶级项目(TLP)。
https://inlong.apache.org/img/inlong-structure-zh.png
1.2 适用场景
Apache InLong 依托腾讯百万亿级别的数据接入和处理能力,整合了数据采集、汇聚、存储、分拣数据处理全流程,拥有简单易用、灵活扩展、稳定可靠等特性。
目前 InLong 正广泛应用于广告、支付、社交、游戏、运营商、人工智能等领域,为广大客户提供高效、便捷的数据采集、服务。
2 - InLong Manager 的作用
InLong 支持数据的采集、汇聚、缓存和分拣功能,用户只需要简单的配置就可把数据从源端导入到实时计算引擎或者写入离线存储系统。
从前面的架构图可以看出,InLong 系统涉及采集、汇聚、缓存、分拣 4 个主要流程,如何将这些流程串联起来?
答案是,我们通过 InLong Manager 来管理系统和任务的元数据,串联任务的全流程。
这里的元数据主要包括:
InLong 系统中的用户信息、审批信息、集群配置信息;
用户创建的数据源端、数据目标端,以及数据 schema 等信息。
其结构如下:
用户可在 InLong Dashboard 提供的 Web UI,或 通过 Manager Client 创建数据流任务,任务审批通过后,即可串联起全部流程,主要包括:
- 创建 MQ 的 Topic 和消费者;
- 创建目标端的库表结构;
- 启动 Flink 任务,从 MQ 消费数据,写入目标端。
3 - InLong Manager 的 SPI 实践
3.1 存在的问题
InLong 源于腾讯内网业务,在近10年的发展中,主要支持的数据源和数据存储如下:
以数据存储为例,由于存储系统的类型有限,且考虑到不同的存储类型的参数差异较大,因此我们的配置表是这样设计的:
由于篇幅所限,没有列出来状态、创建者、修改者、是否删除的标志,以及相关的时间、版本号等字段,可以看到,每张表里都有10多个相同的字段。
在 InLong 上云的过程中,数据源端和目标端的类型急剧增多,而且随着云上客户规模的增加,还会继续扩展更多类型的数据源和目标端。下图是在上面已有类型的基础上,新增的类型:
在扩展的过程中,我们很快发现了原有设计的痛点:
1)字段重复,增加了 DB 的存储成本(虽然有限)
2)配置管理存在大量的相似代码(比如修改、删除),即使提取出公共方法,也会存在大量的
if-else
/switch-case
语句来分别处理不同的逻辑,比如(还有创建 MQ 资源、创建存储端库表结构、下发任务等类似逻辑):
3)【更重要】如果要扩展1个新的存储类型,不仅要添加一张表(频繁变更 DDL 是大忌),还要入侵已有的代码,添加
else
/case
语句并补充特殊逻辑(不符合开闭原则)
3.2 什么是 SPI
在遇到上述问题后,