天天看點

rocketmqConnect/EventBridge原理源碼分析I-架構,服務群組件

作者:中間件XL

1 簡介

RocketMQ Connect是RocketMQ資料內建重要元件,可将各種系統中的資料通過高效,可靠,流的方式,流入流出到 RocketMQ,它是獨立于 RocketMQ 的一個單獨的分布式,可擴充,可容錯系統,它具備低延時,高靠性,高性能,低代碼,擴充性強等特點,可以實作各種異構資料系統的連接配接,建構資料管道,ETL,CDC,資料湖等能力。

RocketMQ EventBridge架起高可伸縮,高吞吐的事件通道。 EventBridge可以看作是runtime(connect)的管理台,建構邏輯(based domain子產品)雲事件通道,調用runtime api(adapter)建立實體(可運作)事件通道

本系列文章分析RocketMQ Connect和RocketMQ EventBridge源碼原理,為兩元件的改造和應用開發提供支援,

本文是第一部分,分析架構,服務群組件

第二部分,分析worker,worker connector,worker source task,worker sink task

2 關鍵詞

CloudEvent

OpenMessaging OpenMessaging 是 Linux 基金會下一個開源組織,緻力于制定消息領域的标準;

3 參考資料

4 釋出計劃

M1 事件通道建構控制台

Ø 拖拽方式建構,包括source connector/sink connector,及其transform鍊;內建rule based transform

Ø 可視化worker/worker叢集狀态和啟停,connector/task啟停

M2 分布式重構

Ø 引入elastic-platform(based zookeeper),實作worker叢集管理

配置服務,叢集成員變更,分片

M3 動态資源管理

Ø 引入資料總管,支援k8s資源申請

5 Connect

本章介紹connect平台

5.1 叢集架構

rocketmqConnect/EventBridge原理源碼分析I-架構,服務群組件

若幹worker組成叢集,同一叢集的worker共同運作同一個,worker間互為負載均衡和故障轉移。

5.2 邏輯架構

rocketmqConnect/EventBridge原理源碼分析I-架構,服務群組件

上圖是事件通道的展開,事件通道是邏輯定義,每個worker自身運作事件通道的部分任務,事件通道多個源和多個目标,源與目标之間轉換鍊,其中filter轉換決定是否流到對應的sink

5.3 元件和場景

rocketmqConnect/EventBridge原理源碼分析I-架構,服務群組件

*上面包視圖根據個人了解有部分改動

startup worker啟動,支援standalone和分布式兩種模式

rest worker的rest接口,輸出worker内connector和任務的操作

服務 叢集服務,狀态服務,配置服務,位點服務,分片服務等

worker connect執行機關,封裝連接配接器/任務,轉換執行,狀态維護

controller 控制器起着門面服務的作用,持有服務執行個體

plugin 類加載器,載入jar包,類型

utils ServiceThread和datasync元件

還有些元件本系列沒有分析:

connector,transform

5.4 原理分析

原理源碼分析通過場景用例分析完成,包括啟動,服務,worker(包括連接配接器和任務),系統元件

5.4.1 啟動(startup)

rocketmqConnect/EventBridge原理源碼分析I-架構,服務群組件

5.4.1.1 worker啟動

worker啟動有兩種模式,分布式和standalone,流程差不多,下面分析一下分布式模式啟動

rocketmqConnect/EventBridge原理源碼分析I-架構,服務群組件

啟動從startup類發起,該類從指令行擷取配置,執行個體化服務類,插件類,然後建構控制器;

控制器執行個體和初始化各服務和功能類,控制器兩個職責

1. 作為門面服務支援rest服務;

2. 持有服務類,傳遞給Worker

有一個點值得注意,分布式控制器定時執行,和的persist方法,定時儲存資料,目的應該是本地定時儲存快照,減少在故障重新開機時恢複時間,但該方法隻有local和基于memory的服務實作了,rocketmq實作persist方法是空的, 估計是等待開發類似KafkaBackingStore可靠存儲

5.4.1.2 worker叢集啟動

目前connect并沒有worker叢集的啟動實作,worker節點啟動,加入叢集,叢集的其他worker收到消費組變更通知,觸發重分片

5.4.2 服務

rocketmqConnect/EventBridge原理源碼分析I-架構,服務群組件

下面詳細分析每個服務

5.4.2.1 分片服務

分片服務負責分派連接配接器和任務到worker

rocketmqConnect/EventBridge原理源碼分析I-架構,服務群組件

RelanceService 分片服務,繼承ServiceThread,獲得定時執行和喚醒執行的特性

RebanceImpl/ AllocateConnAndTaskStrategy 分片的實作類,支援不同的分片政策;分片完成,連接配接器/任務分派到位,調用Worker重新啟動連接配接器和任務

WorkerStatusListenerImpl 實作WorkerStatusListener接口,監聽叢集變化,喚醒分片服務,驅動重新分片

ConnectorConnectorConfigChangeListenerImpl 實作ConnectorConfigUpdateListener接口,監聽connector/task配置變更,喚醒分片服務,驅動重新分片

5.4.2.2 分片政策

分片政策有2點關鍵

1. 分片服務內建ServiceThread,支援喚醒執行和定時執行,而且定時時間間隔1秒,原因可能是叢集變更事件有丢失,或者執行失敗可能,引起任務丢失,頻繁的分片要求分片政策有很高的穩定性,盡量減少連接配接器和任務的轉移

2. 分片每個worker進行,分派屬于自身worker的部分給自己,是以分片政策需與worker相關,不遺漏,不重複的分派

connect自帶兩個實作,預設實作,workerId排序,然後哈希分派;另一個是哈希一緻性,這裡不詳細分析

5.4.2.3 叢集服務

rocketmqConnect/EventBridge原理源碼分析I-架構,服務群組件

叢集服務實作比較簡單,職責是監聽叢集成員變化,對外輸出WorkerStatusListener監聽接口,叢集成員變更事件,驅動執行分片服務

監聽叢集成員變化是通過訂閱消息引擎的消費組成員變更事件

規劃引入zookeeper,重新實作叢集服務,配置服務

5.4.2.4 配置服務(config)

配置服務負責連接配接器/任務配置存儲,同步;配置新增,變更;連接配接器/任務啟停

rocketmqConnect/EventBridge原理源碼分析I-架構,服務群組件

ConfigManagementService 配置管理服務接口,有local,memory,rocketmq實作,适配standalone和分布式模式,memory隻能在standalone;local和rocketmq可用作分布式模式*

DataSync元件 負責分發請求到叢集的所有worker,請求分兩類,配置變更;connector/task啟停操作,兩類請求有重疊,配置變更最終通過重新分片反映到connector/task

對于配置變更,worker不直接處理,通過DataSync分發變更到叢集,當然包括自身,在消息消費中處理

對于啟停操作,connector/task分派到不同worker,worker不直接處理,通過DataSync分發變更到叢集,各worker收到後識别是否自身處理

ConnectorConfigUpdateListener 配置變更通知接口,目前有一個實作,該實作配置設定服務介紹過,喚醒分片服務,驅動重新分片

Ø 主要業務

DataSync元件分析可知,主要業務集中在消息消費方法

rocketmqConnect/EventBridge原理源碼分析I-架構,服務群組件

TARGET_STATE_PREFIX/CONNECTOR_PREFIX/TASK_PREFIX/DELETE_CONNECTOR_PREFIX

系統通過消息key字首識别分流處理,具體業務不詳細分析

rocketmqConnect/EventBridge原理源碼分析I-架構,服務群組件

local實作,起始時發送START_SIGNAL,收集其他worker的配置資料

5.4.2.5 位點服務(position)

位點服務記錄source/sink處理位置,用于分頁和容錯

rocketmqConnect/EventBridge原理源碼分析I-架構,服務群組件

“套路”與配置服務一樣,原理不重複分析

PositionUpdateListener 位點變更監聽目前沒有使用

Ø 主要業務分析

ONLINE 是新節點起來,請求同步叢集的其他節點資料,獲得全量資料

5.4.2.6 狀态服務(state)

狀态服務跟蹤connector/task的狀态

rocketmqConnect/EventBridge原理源碼分析I-架構,服務群組件

“套路”與上面兩個服務一樣,原理不重複分析

Ø 狀态模型

rocketmqConnect/EventBridge原理源碼分析I-架構,服務群組件

WrapperStatusListener 該接口是聚合連接配接器和任務監聽實作,連接配接器和任務通過該接口報告給狀态服務

ConnAndTaskStatus 狀态服務實作都擁有KeyValueStore,但并沒有使用,而是使用ConnAndTaskStatus儲存連接配接器和任務的狀态

Ø 主業務分析

rocketmqConnect/EventBridge原理源碼分析I-架構,服務群組件

5.4.2.7 疑問

???上面的配置服務,位點服務,狀态服務分析,發現一個問題,local實作啟動會發送START_SIGNAL/ONLLINE事件,同步其他worker的資料到本地,但rocketmq沒有, 新的worker是怎樣獲得已有的全量資料?

issue已經送出,有回複及時更新

5.4.3 worker(已完成50%)

TBD,第二部分分析

5.4.4 資源管理

目前connect沒有資源管理,計算資源即worker節點,worker節點相同消費組是同一個叢集,作為計算資源分派任務

規劃引入資料總管,對接k8s,動态申請資源

5.4.5 功能元件

5.4.5.1 rest元件

worker内置rest服務,RestHandle,輸出worker連接配接器/任務建立,配置和變更等服務,實作依賴控制器

5.4.5.2 服務喚醒和等待元件(ServiceThread)

rocketmqConnect/EventBridge原理源碼分析I-架構,服務群組件

服務繼承ServiceThread獲得定時和喚醒執行服務邏輯的特性

5.4.5.3 同步元件

rocketmqConnect/EventBridge原理源碼分析I-架構,服務群組件

datasync底層以消息引擎實作,用于資料同步和指令分發,例如,任務配置變更,通知叢集的其他worker,其他worker儲存到本地,每份資料都得到複制,用于任務故障轉移時恢複

5.4.5.4 store元件

rocketmqConnect/EventBridge原理源碼分析I-架構,服務群組件

上一章提到,位點,狀态,配置的存儲,store元件負責該功能

元件利用泛型和序列化器,支援不同的資料的存儲,實作隻有基于記憶體和檔案,均為本地存儲

5.4.5.5 統計(stat)元件

TBD

6 EventBridge

運作架構

rocketmqConnect/EventBridge原理源碼分析I-架構,服務群組件

總體來說,EventBridge可以看作是runtime(connect)的管理台,建構基于domain的邏輯事件通道,遠端調用runtime api建立實體(可運作)事件通道

元件架構

rocketmqConnect/EventBridge原理源碼分析I-架構,服務群組件

core 邏輯事件通道的模型

rpc 對應worker的RestHandle,建構/啟停connector等操作

rocketmqConnect/EventBridge原理源碼分析I-架構,服務群組件

web 邏輯事件通道模型的建構,基于spring boot的web應用

其中,web,rpc,持久屬于adapter子系統,不同的runtim有對應的實作,domain是抽象的事件通道模型

附錄

open message

open message是阿裡發起一個消息标準,旨在提高系統連通性,消息的自解釋能能力,了解open message對了解rocketmq connect和rocketmq eventbridge有很大的幫助

TBD