延續昨天的規劃,我們進入專案實作階段。接下來將透過實際的專案搭建,帶領各位理解每個技術選擇背後的設計思維與維運考量,幫助讀者更清楚地掌握專案落地過程中需要經歷與思考的重點。
在資料平台規劃中,核心組件 Kafka 的部署至少有四種方案:
部署方式 | 抽象層級 | 技術掌握需求 | 維運負擔 | 適用場景 |
---|---|---|---|---|
實機安裝 Kafka | 低 | OS、Kafka、硬體 | 高 | 學習、精細調校 |
Docker Image | 中 | Docker、容器網路與卷 | 中 | PoC、開發測試、快速迭代 |
Helm Chart(Bitnami) | 中高 | Helm、K8s、values.yaml | 中 | 開發環境、跨團隊部署、模板化部署 |
Operator(Strimzi) | 高 | K8s、CRD、Operator | 低 | 生產環境、多環境雲端部署、長期運維 |
在選擇部署方案時,需要考慮專案上線時程、技術基礎(避免技術債)、維運負擔(團隊人力與服務負荷)等因素。在本系列中,我們選擇使用 Strimzi Operator 進行 Kafka 部署。
在確認 Kafka 部署方案後,下一步是思考如何將資料從 Source DB(如 MySQL) 可靠地傳入 Kafka,以及從 Kafka 推送到下游消費端。
根據 官方文件,Kafka Connect 提供了一個框架,實際的資料連接則需透過程式或 Connector 實現。我們可選擇的方案包括:
自行實作生產者與消費者程式
使用實機或 Docker Image 部署 Kafka,並上傳程式後透過 bin/connect-distributed.sh
啟動
使用已封裝好的 Docker Image(如 Debezium Connect)
bin/connect-distributed.sh
啟動服務。透過 Strimzi Operator 管理 Kafka Connect 並使用封裝好的 Debezium Connect 部署
閱讀 Debezium Connect 的 Dockerfile,可以清楚看到啟動流程與設定邏輯:本質上仍是透過
connect-distributed.sh
啟動 Kafka Connect Server,只是將環境與依賴封裝在 Image 中,降低部署複雜度。
為了方便統一管理、提升自動化程度與穩定性,我們在本系列中選擇 同樣採用 Strimzi Operator 進行部署。這不僅與 Kafka 集群的管理方式一致,也能確保 Connector 的生命週期、配置管理與監控流程統一,為後續端到端資料流管線的建置奠定穩固基礎。
有了前面 Kafka 與 Kafka Connect 部署方案的基礎,我們可以利用 Strimzi 提供的範例進行專案的初步設置:
基於這些範例,我們可以整理專案目錄,完成基本架構如下:
dataplatfomr-poc/
├── docker/
│ └── dockerfile # kafka connect image
│
├── kafka/
│ ├── strimzi.yml # Strimzi Operator Helm 安裝參數
│ ├── kafka-ephemeral.yml # Kafka Cluster 設定(Ephemeral 模式)
│ ├── kafka-connect.yml # Kafka Connect Cluster 設定
│ ├── topic.yml # Kafka Topic 建立設定
│ ├── mysql-debezium-connector.yaml # Source Connector (Debezium)
│ └── jdbc-sink-connector.yml # Sink Connector (JDBC Sink)
│
├── mysql/
│ ├── configmap-init.yml # 初始化 SQL 腳本
│ ├── configmap-mycnf.yml # MySQL 配置(my.cnf)
│ └── deployment.yml # MySQL Deployment 與 Service
│
├── target-db/
│ └── target-mysql.yml # Sink MySQL (目標資料庫) Deployment 定義
│
├── terraform/
│ ├── main.tf # 建立 Namespace 或其他 k8s 資源
│ └── variables.tf
│
├── scripts/
│ └── deploy-all.sh # 一鍵部署腳本 (Terraform + K8s)
│
└── README.md # 專案文件與操作說明
可以看到,與昨天規劃的內容相比,目錄結構有了不少調整。這正是專案落地與敏捷開發過程中的常態:需求變化、技術選型或環境配置,往往會引導架構持續迭代與優化。
今天帶領各位實際進行專案的搭建,並根據需求進行資源探索與技術選型。這部分雖然在多數分享中常被忽略,卻是我認為 DevOps 工作中最關鍵、也最能體現專業價值的一環。
隨著軟體開發的成熟與生態系的豐富,未來利用開源專案或內部既有程式碼來快速建構服務,將會成為主流。而在生成式 AI 不斷進步的今日,DevOps 的角色正從 IaC、SRE,逐漸邁向平台化與人機協作的整合設計者。
面對愈趨多元的資源(包括 AI 生成內容),DevOps 不僅要會「使用服務」,更要懂得 逆向理解技術原理──能夠閱讀 source code、查閱技術文件、分析配置邏輯,並進一步驗證、測試生成內容的正確性與可用性。這正是新時代工程師的核心競爭力所在。
也因此,這一階段我選擇不再只是提供一個可直接運行的 PoC,而是 帶領大家從零開始,實際搭建一個能被團隊理解、擴充、共享的專案。我相信,比起「知道服務能做什麼」,更重要的是「知道如何讓服務成為團隊能共用的架構基石」。
這樣的思維,也逐漸趨近於 vibe coding 或 spec-driven development 的理念。
為了讓持續閱讀的朋友不感到混亂,我已調整 Day27 的內容──
最後四天的「整合篇」將從「帶領使用 PoC 驗證」改為「帶領實際搭建專案並進行驗證」。
感謝一路陪伴閱讀的朋友,也感謝未來某天因緣際會讀到這系列文章的你。
希望這些內容能帶給你啟發與助益,我們明天見!