Data Platform 元件#01:CDC 的選擇思考

在搭建 Data Platform 時,我們選擇 CDC 作為資料接收的核心策略。這篇記錄了考量與取捨。

High-tech abstract art featuring blue and teal circuit-like patterns with a digital vibe.
Photo by Steve Johnson on Pexels

Data Platform 筆記#01 中,我們介紹了初版的技術架構,其中資料接收的核心策略是 CDC(Change Data Capture)。這篇聊聊當時的選擇脈絡。

初心

在 Data Platform POC 階段,我們就開始設想未來接資料該怎麼處理。在以往的資料交換經驗中,很常見到的是:來源系統透過 ETL 將資料整理到中繼區,Data Center 再透過 ETL 從中繼區將尚未接收的資料接進來。也就是說,每多一個資料來源,就要多寫一支 ETL 程式,可預想的是維運量也隨之增加。

除了儘量地定義出一致的規範以減少客製,也在思考有沒有機會做到:只要來源系統將準備好的資料提供出來,Data Platform 做好相應設定就能自動接上,不用再寫一堆程式。在 Data Platform 角度而言,儘量避免為每一個來源資料寫客製的 ETL 程式,有效運用開發能量,也降低維運成本。

可能的工具

在作出選擇之前,我們思考了幾個選項:

Spring Cloud Data Flow

Spring Cloud Data Flow 支持批次處理也支持 Streaming,功能強大,學習曲線有點高,是曾經的選項,但在 2025 年公告停止維護開源版,投入學習的資源有但不多,於是就放下了。
https://spring.io/projects/spring-cloud-dataflow

Apache Airflow

很強的排程引擎,適合批次處理,而不是即時的資料變更同步,略不符我們的需求。
https://airflow.apache.org/

Apache Flink 是很成熟的即時處理引擎之一,技術含量很高,維運複雜度相對也高。但對於我們「只要把資料接進來」的需求,有點殺雞用牛刀了。
https://flink.apache.org/

Airbyte

很讓人心動的資料整合工具,支援許多 Connector,可以快速接很多來源。因為時程的關係,加上當時我們已經有了 Kafka + Debezium 的 POC,有些可惜地沒有再繼續投入了解。
https://airbyte.com/

Debezium

Debezium 是專注於 CDC 的老牌專案,搭配 Kafka 作為緩衝與解耦層。兩者都是經過大規模驗證的開源專案,社群活躍、文件充足。維運雖然有難度,但我們後來透過 Helm Chart 簡化部署配置,並且找到了 UI 來輔助管理。
https://debezium.io/

為什麼選擇 CDC

CDC 的核心是 「事件驅動」:只要資料庫發生變更(Insert/Update/Delete),CDC 工具就會自動把變更記錄抓出來,送到下游。這跟我們的期待很接近:

  • 不需要排程:資料變更時才觸發,不是輪詢
  • 幾乎不需要寫程式:設定好來源與目標,資料流就自動跑
  • 可以一次監控多張表

相較於傳統 ETL(定時撈資料、透過註記標記處理狀態),CDC 更有機會能達成「來源給資料就能自動接」的樣貌。

在應用的場景中,我們選擇不處理 Delete 事件。原因是不易區分來源是「刪除異常資料」還是「正常的歷史資料 Purge」。如果把刪除動作也同步過來,萬一來源誤刪,Data Platform 也跟著刪掉,資料就沒了。

沒有最好,只有當下合適

CDC 主要是監控資料庫的變化,如果來源提供資料的方式是 API、檔案等方式,仍是需要尋找合適的方式來接入資料。

在我們的需求場景中,資料庫佔大宗,八二法則思考下,自然而然就成為了尋找解決方案的最優先級。用 CDC 不是絕對,在尋找解決方案的過程中,也看過不少推薦 Apache Flink 解決方案,選擇會因需求場景、環境、團隊而有不同,重點還是在於想解的問題是什麼。

能解決問題的,就是好的選擇。

Read more

[紀錄] 初試 OpenClaw

[紀錄] 初試 OpenClaw

夯了很久的 OpenClaw,近期開始出現了退安裝潮,我卻正要開始嘗試使用。 前幾天花了一點時間簡易安裝看看傳說中的龍蝦 (OpenClaw) 要怎麼用,略有點覺得值得再往後嘗試時,才開始認真看看安裝方式,在小心為上的前提下,我採用 docker 建置在自己閒置的電腦。 在 docker-compose.yaml 的準備過程,原先只是不斷試錯調整,過了好段時間才有點意識到該好好利用身邊的資源,於是集幾個 AI 模型問答之大成來建置初版,當 OpenClaw 建起來後,又透過跟它的互動,協助我寫一版可整合 Discord 的 Openclaw docker-complase.yaml 自用。(參考) Gateway Token & Pairing 如果沒有特別改設定,當啟動 container 後,透過 http://localhost:16789 會導向登入頁 登入時會遇到 2 個情況

By Jo
Data Platform 筆記#02:從可行到可承接

Data Platform 筆記#02:從可行到可承接

在初版架構逐漸成形後,時間也差不多過了一年。 架構可以跑、資料可以流動,但我仍然不確定它能不能真正落地。這條路必須要團隊可以承接、可以擴展,數據才有機會真正發揮價值。 很慶幸的是,我的主管願意投資時間,讓這個方向能繼續推進。也正是在那段時間,我的思考開始出現轉變... 前一篇的重點,是讓流程從「能跑」走向「能持續」。 而接下來我開始思考:如果這件事要由團隊一起做下去,現在的做法夠不夠讓人接手? 轉變的核心 回頭看那一年,大多數時間其實是在解問題。 但接下來,我該解的是另一個問題:怎麼讓別人不用再解一次同樣的問題? 於是投入了約莫三個月、壓力值很高的一段時間,開始把原本依賴個人經驗與記憶的做法,收斂成可以被團隊理解與複製的形式。 這個收斂,後來具體落在幾個方向上: * 把 Data Center 的部署方式收斂成一致做法,降低環境轉換成本 * 把資料整理作業轉變為配置驅動,讓流程與部署有規則可循 * 整理 DDL 轉換規則與範本,讓團隊能共用同一套方法 * 把知識系統化交付出去 這些事情的唯一核心是 讓方法大於個人。 從個人經驗,到規則明確 第一個改變:

By Jo
Data Platform 筆記#01:初版技術架構成形

Data Platform 筆記#01:初版技術架構成形

在上篇的 POC 之後,我們整理了一份內部報告,將問題拆成資料蒐集、基礎資料定義、資料量與查詢效能、資料治理、技術架構等幾個面向。 這份整理的目的是先建立邊界,讓我們從發散與模糊,逐步走向具體且聚焦。 在這個基礎上,我開始把關注重點轉向資料流: 如何讓資料自動、穩定、乾淨地進到分析效能較好的資料庫? 同時,也剛好迎來一個契機:與技術能量較高的團隊合作發展數據中台。這讓 Data Center 的推進獲得更多資源與支援,讓我們能更系統化地思考架構問題。 思考階段 這個階段,我們主要思考幾個問題: * 不同來源的資料,能不能用相對一致的方法接進來? * 資料會持續累積,是否有合適的儲存與管理方案? * 資料進來後,分層應該怎麼定義? * 查詢分析時,是否有更適合的查詢引擎? 各資料源的特性不同,接收方式很難完全一致。但若每種來源都設計一套專屬流程,維運成本會快速上升。因此初步的想法是先用一種主要方式處理大多數的情境,讓資料流先跑起來,再逐步優化。 過去常見的分層方式,是將資料分成: * 可追溯的原始資料(Stage) * 清洗整理後的乾淨資料(Data) *

By Jo