如果你已經閱讀過「快速上手」,應該已經知道 GRAVITY 能透過 Docker 進行快速部署。只不過因為在該文件中並沒有說明設定細節,你可能還不知道如何客製化一條真正有用的資料管線。因此,本文件將延續案例,示範如何打造您的第一條資料管線之外,並會初步針對設定工作進行更多細節說明。
延續快速上手的範例,本文的實作目標仍然是打造一條管線,從 MySQL 即時抄寫所有的變更資料到 PostgreSQL,實現異質資料庫之間的資料抄寫,如下圖所示:
依圖所示,此範例中實作上會由三個部分所組成,形成完整的數據鏈路:
資料源適配器(Adapter)用於從 MySQL 資料庫系統收集資料變更事件,並將資料送入資料節點。
資料節點會將資料分類壓縮保存,並即時生成資料快照(Snapshot) ,然後等待接受資料傳輸器前來訂閱資料。
資料傳輸器(Transmitter)會在資料節點上訂閱資料,然後將資料寫入到目標的 PostgreSQL 資料庫。
GRAVITY 的資料節點由控制器(Controller)和同步器(Synchronizer)兩個核心元件所組成,我們分別各準備一個 YAML 為其做設定和部署:
同步器的規則設定參數 GRAVITY_SYNCHRONIZER_RULES_SETTINGS 需要一個 JSON 格式,其中可以於 rules 陣列內定義多組規則,決定收集的資料該如何處理和保存。
在這範例中定義了兩種規則,讓資料節點只會接受兩種事件 accountInitialized 和 accountCreated,用於在第一次同步時接受資料源既有資料,以及資料源即時的新資料(當資料源插入資料時)接收。而設定中的 collection 是在資料節點的資料集(Collection),我們可以決定要將事件放到指定資料集進行保存,若是多個事件都被指定放入同一個資料集,該資料集就會聚合多個事件的資料。
然後我們定義了資料欄位的對應表 mapping,描述來源資料的欄位 source,如何對應到資料集中新的欄位 target,在範例中,我們保持了欄位的定義不變,實現完全的資料對超機制。
最後,為資料決定能唯一識別資料的主鍵(Primary Key),資料節點會依據主鍵進行資料更新、聚合關聯和快照。
在準備好 YAML 之後,就可以開始使用 Docker Compose 進行部署:
在 YAML 檔中代入 GRAVITY_ADAPTER_MYSQL_SOURCE_SETTINGS 環境變數可以設定資料源的連線資訊,讓適配器(Adapter)可以去連接資料庫系統以取的事件和資料,由於在這例子中選擇的是 MySQL 的適配器,因此填入的是 MySQL 資料庫的連線資訊。
此環境變數的內容是 JSON 格式,其中可以在 sources 欄位裡設定多組來源,除了要指定連線資訊之外,也需要填入 tables 選擇需要監聽的資料表(Table)以及需要處理的事件(Event)。
上面例子中的設定代表著下列意義:
- 監聽 users 資料表。
- 啟用 initialLoad 和監聽 snapshot 事件,在第一次啟動時載入完整的既有資料。
- 監聽 create 事件,即時接收被插入(Insert)的資料事件。
此外,在監聽事件時,需要設定進入到資料節點的事件名稱,事件名稱則對應同步器的事件處理規則設定(accountInitialized 和 accountCreated)。
進行部署:
資料傳輸器會從資料節點訂閱所需要的資料集(collection),然後將資料集的資料寫入到指定的資料庫系統(以這範例來說是 PostgreSQL),我們需要設定目標資料庫的連線資訊,讓傳輸器可以順利連接資料庫。
由於我們需要指定訂閱的資料集,需要額外設定 GRAVITY_TRANSMITTER_POSTGRES_SUBSCRIPTION_SETTINGS 讓傳輸器知道被訂閱的資料集名稱,以及將要寫入的資料表。在上面範例中,我們將訂閱資料節點上的 accountData 資料集,並將接受到的寫入到 PostgreSQL 的 accounts 資料表。
進行部署:
若將元件設定好並部署完成,資料就會依據我們的設計,從 MySQL 的 users 資料表抄寫至 PostgreSQL 的 accounts 資料表。由於我們只有監聽「新增事件」,所以只有資料新增、插入時的資料,沒有任何事後進行變更(Update)或刪除(Delete)的資料更新。若有更新或刪除的資料同步需求,則再補上事件監聽和事件處理規則即可。