简介
集成平台是作为企业或复杂系统的"交通中枢",连接并协调各孤立的应用、数据和设备,打破"信息孤岛",让信息和业务流程在不同系统间自由、高效地流动。本平台支持拖拽"画"逻辑数据通道,调用runtime构建物理数据通道,实现0代码搭建系统间数据集成。
本系列解释集成平台的源码原理,包括数据通道,runtime,目前runtime是rocketmq connect
本文是分析rocketmq connet源码分析第一部分,架构,服务和组件
第二部分分析worker,worker connector,worker source task,worker sink task
关键词
OpenMessaging OpenMessaging 是 Linux 基金会下一个开源组织,致力于制定消息领域的标准;
集成平台/接口中台
参考资料
Connect
本章介绍connect平台
技术架构

上图是数据通道是逻辑定义,每个worker运行事件通道的部分任务,数据通道由多个源和多个目标,源与目标之间转换链构成
> 同一集群worker,共同运行一个数据通道的任务,负载均衡和容错
> rocketmq connect/rocketmq底层支撑,事件bus,数据同步,分布式特性支持
> 转换链,修改转换的数据,基于规则的实现
集群架构
下图是rocketmq connect的集群架构

若干worker组成执行集群,同一集群的worker共同运行同一个++数据通道++,worker间互为负载均衡和故障转移。
逻辑架构和场景

startup 启动worker,支持++standalone++ 和++分布式++两种模式
rest worker的内置rest服务,接收client的指令和请求
服务 集群服务,状态服务,配置服务,位点服务,分片服务等
workerconnect执行单位,封装连接器/任务,转换执行,状态维护
controller 控制器起着门面服务的作用,持有服务实例
plugin 类加载器,载入jar包,类型
utils ServiceThread和datasync组件
还有些组件本系列没有分析:
connector,transform,stat,metrics
原理分析
原理源码分析通过场景用例分析完成,包括启动,服务,worker(包括连接器和任务),系统组件
启动(startup)
worker启动有两种模式,分布式和standalone,流程差不多,下面分析一下分布式模式启动

启动从startup类发起,该类从命令行获取配置,实例化服务类,插件类,然后构建控制器;
控制器实例和初始化各服务和功能类,控制器两个职责
- 作为门面服务支持rest服务;
- 持有服务类,传递给Worker
worker集群启动
目前connect并没有worker集群的启动实现,需逐个worker节点启动,加入集群,集群的其他worker收到消费组变更通知,触发重分片
服务

上图服务逻辑架构图,下面逐个分析服务
集群服务

集群服务实现比较简单,职责是监听集群成员上下线,调用WorkerStatusListener监听接口,处理集群成员变更事件,驱动执行分片服务
监听集群成员变化是通过订阅消息引擎的消费组成员变更事件
分片服务
分片服务负责分派连接器和任务到worker

RebalanceService 分片服务,继承ServiceThread,获得定时执行和唤醒特性
RebanceImpl/AllocateConnAndTaskStrategy 分片的实现类,支持不同的分片策略;分片完成,连接器/任务分派到位,重新启动Worker连接器和任务
WorkerStatusListenerImpl 实现WorkerStatusListener接口,监听集群变化,唤醒分片服务,驱动重新分片
ConnectorConnectorConfigChangeListenerImpl 实现ConnectorConfigUpdateListener接口,监听connector/task配置变更,唤醒分片服务,驱动重新分片
分片策略
分片策略有2点关键
- 分片服务集成ServiceThread,支持唤醒执行和定时执行,而且定时时间间隔1秒,原因可能是集群变更事件有丢失,或者执行失败可能,引起任务丢失,频繁的分片要求分片策略有高的稳定性,尽量减少连接器和任务的转移引起启停
- 分片每个worker进行,分派属于自身worker的部分给自己,因此分片策略需与worker相关,不遗漏,不重复的分派
connect自带两个实现,默认实现,workerId排序,然后哈希分派;另一个是哈希一致性,这里不详细分析
配置服务(config)
配置服务负责连接器/任务配置存储和同步;连接器/任务启停

ConfigManagementService 配置管理服务,有local,memory,rocketmq实现,适配standalone和分布式模式,memory只能在standalone;local和rocketmq可用作分布式模式
DataSync 组件 负责分发请求到集群的所有worker,请求分两类,配置变更;connector/task启停指令,两类请求有重叠,配置变更最终通过重新分片反映到connector/task
对于配置变更,worker不直接处理,通过DataSync分发变更到集群,当然包括自身,在消息消费中处理,这样所有配置在每个worker有完整备份,用于故障转移,新worker同步
对于启停操作,connector/task分派到不同worker,worker不直接处理,通过DataSync分发变更到集群,各worker收到后识别是否自身处理
ConnectorConfigUpdateListener 配置变更通知接口,目前有一个实现,该实现分片服务介绍过,唤醒分片服务,驱动重新分片
DataSync组件分析可知,主要业务集中在消息消费方法

TARGET_STATE_PREFIX
CONNECTOR_PREFIX 连接器
TASK_PREFIX 任务
DELETE_CONNECTOR_PREFIX 删除连接器
系统通过消息key前缀识别分流处理,具体业务不详细分析
位点服务(position)
位点服务记录source/sink处理位置,用于分页和容错

"套路"与配置服务一样,通过消息key前缀分流处理
PositionUpdateListener 位点变更监听目前没有使用
- 主要业务分析

ONLINE 是新节点起来,请求同步集群的其他节点数据,获得全量数据
状态服务(state)
状态服务跟踪connector/task的状态

"套路"与上面两个服务一样,通过消息key分流处理
- 状态模型

WrapperStatusListener 该接口是聚合连接器和任务监听实现,连接器和任务通过该接口报告给状态服务
ConnAndTaskStatus 状态服务实现都拥有KeyValueStore,但并没有使用,而是使用ConnAndTaskStatus保存连接器和任务的状态
- 主业务分析

资源管理
目前connect没有资源管理,计算资源即worker节点,worker节点相同消费组是同一个集群,作为计算资源分派任务
功能组件
rest服务
worker内置rest服务,RestHandle,输出worker连接器/任务新建,配置和变更等服务,实现依赖控制器
服务唤醒和等待组件(ServiceThread)

服务继承ServiceThread获得定时和唤醒执行服务逻辑的特性
同步组件

datasync底层以消息引擎实现,用于数据同步和命令分发,例如,任务配置变更,通知集群的其他worker,其他worker保存到本地,每份数据都得到复制,用于任务故障转移时恢复
store组件
上一章提到,位点,状态,配置的存储,store组件负责该功能

组件利用泛型和序列化器,支持不同的数据的存储,实现只有基于内存和文件,均为本地存储
统计(stat)组件
不分析
metrics组件
不分析
附录
open message
open message是阿里发起一个消息标准,旨在提高系统连通性,消息的自解释能能力,了解open message对了解rocketmq connect和接口中台有很大的帮助