隨著資訊時代的蓬勃發展,企業對實時資料處理的需求逐漸成為推動業務創新和發展的重要驅動力。在這個快速變化的環境中,許多企業選擇將 Oracle 資料庫同步到 Kafka,以滿足日益增長的實時資料處理需求。本文將深入探討這一趨勢的背後原因,並透過一個真實的客戶案例來強調實時性在業務場景中的重要性。
為什麼:理解 Oracle - Kafka 的實時同步需求
先來看一個典型的業務場景。實時庫存管理需要迅速響應庫存變化,以確保及時的補貨和訂單處理。透過將 Oracle 資料同步到 Kafka,可以實現實時捕獲庫存變更,並將這些變更事件傳遞給下游業務,如訂單系統、報表系統等。如此一來,企業得以更加靈活、實時地管理庫存,從而提高供應鏈效率。
為什麼要同步至 Kafka?
再結合 Oracle 以及 Kafka 的自身特性,我們不難總結出 Oracle 到 Kafka 資料同步背後的實際需求,這通常涉及到滿足實時資料需求、支援大規模資料處理、構建事件驅動體系結構以及提高整體系統效能等。以下是一些常見原因總結:
-
實時資料流: 作為一個分散式訊息佇列系統,Kafka 能夠提供高吞吐量和低延遲的實時資料處理。透過將 Oracle 資料庫同步到 Kafka,可以實現對資料的實時捕獲和處理,使得企業能夠更快地響應資料變化。
-
高可用性:Kafka 透過分散式來實現高可用性,一個 Kafka 叢集通常包含多個 Broker,每個 Broker 負責儲存一部分的資料副本,這樣即使某個 Broker 出現故障,其他 Broker 也可以繼續工作,從而保證服務的可用性。
-
可擴充套件性: Kafka 基於其分散式架構、消費者組、分割槽和副本機制、水平擴充套件能力、高併發處理能力和容錯性等方式實現了可擴充套件性,從而能夠處理大規模的訊息資料,滿足高吞吐量和高併發的需求。
-
**高效查詢: **Kafka 憑藉順序寫入、索引、二分查詢和記憶體快取等技術,得以高效處理大規模的訊息流,並保持高效能和低延遲,從而實現高效的資料讀取。
-
高併發寫入: Kafka 的設計理念注重高併發的資料寫入,採用了多種技術,如零複製技術、批次處理、訊息壓縮、非同步處理等,提高了資料傳輸的效率和處理的速度,能夠處理大規模的資料流。充分利用 Kafka 的高併發寫入能力,有助於業務系統處理大量的寫入請求,適用於需要高吞吐量的業務,比如日誌記錄、事件溯源等。
-
解耦資料生產者和消費者: Kafka 的訊息佇列模型有助於解耦資料生產者和消費者之間的關係,可以使資料庫的變更與實際資料使用者(應用程式、分析系統等)之間形成松耦合,從而提高整個系統的靈活性。
-
支援事件驅動架構: 透過將 Oracle 資料同步到 Kafka,可以構建基於事件的架構。資料庫的變更可以作為事件流式傳輸,觸發系統中其他元件的動作,從而實現更靈活、敏捷的業務流程。
-
**資料整合: **Kafka 作為中介軟體,能夠協調不同系統之間的資料流,可以輕鬆實現與其他資料來源和目標的整合,促使系統更好地適應複雜的資料處理和交換需求。
為什麼需要實時?
與此同時,資料同步的實時性在這個過程中被不斷強調,還是舉幾個簡單的例子:
-
實時報表和監控系統: 對於需要實時監控和報表展示的業務,如運營監控、效能監控等,及時獲取資料庫中的資料變更是關鍵。透過實時同步到 Kafka,保障這些監控系統的資料時刻處於最新狀態。
-
事件驅動架構: 許多現代應用採用事件驅動架構,透過釋出-訂閱模型進行系統整合。在這種情況下,實時同步資料到 Kafka 是保證事件的及時傳播和處理的關鍵。
-
**使用者體驗: **在需要實時互動和響應的應用中,使用者期望看到最新的資料狀態。例如,在線上協作或實時通訊應用中,使用者需要實時看到其他使用者的操作和變更。
至此,我們已經大致瞭解了 Oracle 到 Kafka 資料實時同步的重要性,下面再來看一些常見的同步方案。
怎麼做:資料同步方案對比
手動方案:配合開源工具
實現 Oracle 到 Kafka 資料實時同步的手動方案涉及多個步驟,包括設定 Oracle 資料庫、配置 Kafka 環境,以及編寫同步程式。下面是一個簡單的手動方案示例,主要涉及使用 Debezium 開源工具實現 Oracle 資料庫到 Kafka 的實時同步。
步驟一:準備工作
- 安裝 Oracle 資料庫: 確保已安裝並正確配置 Oracle 資料庫。
- 安裝 Kafka: 安裝 Kafka 並啟動 ZooKeeper 服務,作為 Kafka 的依賴。
- 安裝並配置 Debezium: Debezium 是一個開源的變更資料捕獲工具,用於監聽資料庫變更並將其傳送到 Kafka。下載並配置 Debezium Connector for Oracle。(https://debezium.io/)
步驟二:配置 Oracle 資料庫
-
啟用歸檔日誌: 在 Oracle 資料庫中,確保歸檔日誌已啟用,這是 Debezium 監聽變更的必要條件。
sqlCopy code ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=/archivelog'; ALTER SYSTEM SET LOG_ARCHIVE_FORMAT='arch_%t_%s_%r.arc';
-
建立 CDC 使用者: 建立一個專用於 Change Data Capture (CDC) 的使用者,並授予必要的許可權。
sqlCopy code CREATE USER cdc_user IDENTIFIED BY cdc_password; GRANT CONNECT, RESOURCE, CREATE VIEW TO cdc_user;
-
啟用 CDC: 啟用 Oracle 的 CDC 特性,並指定 CDC 使用者。
sqlCopy code EXEC DBMS_CDC_PUBLISH.CREATE_CHANGE_SET('MY_CHANGE_SET', 'CDC_USER'); EXEC DBMS_CDC_PUBLISH.ALTER_CHANGE_SET('MY_CHANGE_SET', 'ADD'); EXEC DBMS_CDC_PUBLISH.CREATE_CAPTURE('MY_CAPTURE', 'CDC_USER'); EXEC DBMS_CDC_PUBLISH.ALTER_CAPTURE('MY_CAPTURE', 'ADD'); EXEC DBMS_CDC_PUBLISH.CREATE_CHANGE_TABLE('MY_CHANGE_TABLE', 'CDC_USER', 'MY_CAPTURE', 'MY_CHANGE_SET');
步驟三:配置 Debezium 聯結器
-
配置 Debezium Connector: 建立一個 JSON 配置檔案,指定 Oracle 連線資訊、監控的表等資訊。
jsonCopy code {"name": "oracle-connector", // 服務註冊聯結器時分配給聯結器的名稱。 "config": {"connector.class": "io.debezium.connector.oracle.OracleConnector", // Oracle聯結器類的名稱 "database.server.name": "my-oracle-server", //為聯結器捕獲更改的 Oracle 資料庫伺服器標識並提供名稱空間的邏輯名稱 "database.hostname": "your-oracle-host", //oracle例項地址 "database.port": "your-oracle-port", //oracle資料庫埠 "database.user": "cdc_user", //oracle資料庫使用者 "database.password":"cdc_password", //oracle資料庫密碼 "database.dbname":"your-oracle-database",//要從中捕獲更改的資料庫的名稱 "database.out.server.name":"oracle-server", // kafka主題 "table.include.list": "CDC_USER.MY_TABLE",//orcle中表進行資料監測輸出資料 "schema.history.internal.kafka.bootstrap.servers": "192.3.65.195:9092",//此聯結器用於將 DDL 語句寫入和恢復到資料庫歷史主題的 Kafka 代理列表 "schema.history.internal.kafka.topic": "schema-changes.inventory" // 聯結器寫入和恢復 DDL 語句的資料庫歷史主題的名稱 } }
-
啟動 Debezium Connector: 使用 Kafka Connect 啟動 Debezium Connector。
bashCopy code bin/connect-standalone.sh config/worker.properties config/debezium-connector-oracle.properties
步驟四:驗證同步
-
插入資料: 在 Oracle 資料庫中插入一些資料。
sqlCopy code INSERT INTO CDC_USER.MY_TABLE (ID, NAME) VALUES (1, 'John Doe');
-
檢查 Kafka 主題: 檢查 Kafka 中是否有與表變更相關的訊息。
bashCopy code bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic my-oracle-server.CDC_USER.MY_TABLE --from-beginning
此處應該能夠看到與插入操作相關的 JSON 訊息。
以上只是一個簡單的示例,實際情況可能會更加複雜,具體的配置和操作可能取決於 Oracle 和 Debezium 版本的不同。在生產環境中,請務必遵循相關安全和最佳實踐。
經典方案:配合 Oracle 官方工具 OGG
使用 Oracle GoldenGate (OGG) 實現 Oracle 到 Kafka 資料實時同步的方案同樣包含多個步驟,以下是一個基本示例,以 OGG Classic Replicat 為例。請注意,具體配置仍然會因 Oracle GoldenGate 版本的不同而有所變化。
步驟一:準備工作
- 安裝 Oracle GoldenGate: 安裝並配置 Oracle GoldenGate 軟體。
- 安裝 Kafka: 安裝 Kafka 並啟動 ZooKeeper 服務,作為 Kafka 的依賴。
步驟二:配置 Oracle 資料庫
- 啟用歸檔日誌: 確保 Oracle 資料庫的歸檔日誌已啟用。
sqlCopy code ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=/archivelog'; ALTER SYSTEM SET LOG_ARCHIVE_FORMAT='arch_%t_%s_%r.arc';
步驟三:配置 OGG Extract 和 Pump
-
建立 OGG Extract: 配置 OGG Extract 用於捕獲變更資料。
bashCopy code cd $OGG_HOME ./ggsci GGSCI> ADD EXTRACT ext1, TRANLOG, BEGIN NOW GGSCI> ADD EXTTRAIL /trail/et, EXTRACT ext1 GGSCI> ADD EXTRACT dpump, EXTTRAILSOURCE /trail/et GGSCI> ADD RMTTRAIL /trail/rt, EXTRACT dpump
-
配置 OGG Pump: 配置 OGG Pump 用於將捕獲的變更資料傳輸到 Kafka。
bashCopy code GGSCI> ADD EXTRACT pump1, EXTTRAILSOURCE /trail/rt, BEGIN NOW GGSCI> ADD RMTTRAIL /trail/pt, EXTRACT pump1 GGSCI> ADD REPLICAT rep1, EXTTRAIL /trail/pt, SPECIALRUN
步驟四:配置 OGG Replicat 和 Kafka
-
編輯 OGG Replicat 引數檔案: 編輯 Replicat 引數檔案,配置連線資訊和目標 Kafka 主題。
plaintextCopy code REPLICAT rep1 USERID ogguser, PASSWORD oggpassword ASSUMETARGETDEFS MAP source_table, TARGET kafka_topic, COLMAP (...)
-
啟動 OGG Replicat: 啟動 Replicat 程序。
bashCopy code ./ggsci GGSCI> START REPLICAT rep1
步驟五:驗證同步
-
插入資料: 在 Oracle 資料庫中插入一些資料。
sqlCopy code INSERT INTO source_table (ID, NAME) VALUES (1, 'John Doe');
-
檢查 Kafka 主題: 檢查 Kafka 中是否有與表變更相關的訊息。
bashCopy code bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic kafka_topic --from-beginning
新一代資料實時平臺工具:低成本、更簡單
以 Tapdata 為例,作為中國的 “Fivetran/Airbyte”, Tapdata 是一個以低延遲資料移動為核心優勢構建的現代資料平臺,內建 100+ 資料聯結器,擁有穩定的實時採集和傳輸能力、秒級響應的資料實時計算能力、穩定易用的資料實時服務能力,以及低程式碼視覺化操作等。典型用例包括資料庫到資料庫的複製、將資料引入資料倉儲或資料湖,以及通用 ETL 處理等。
Tapdata 是一個專注於實時資料同步的工具,擁有強大且穩定的資料管道能力,可以用來替換類似於 OGG/DSG 這樣的同步工具,將資料從 Oracle 、MySQL 這樣的資料庫同步到同構或者異構型別的資料目標。
以下是詳細的操作教程(演示版本為 Tapdata Cloud):
步驟一:Tapdata 安裝與部署
-
註冊並登入 Tapdata Cloud
-
安裝並部署 Tapdata: 訪問 Tapdata 官方網站,獲取操作指引,完成 Tapdata Agent 的安裝與部署。
註冊 Tapdata Cloud,即刻開啟您的實時資料之旅
申請試用 Tapdata 本地部署版本
步驟二:配置資料來源和目標
- 新建 Oracle 資料來源:進入 Tapdata Cloud 連線管理頁面,建立資料來源 Oracle 的連線並測試透過。
- 新建資料目標 Kafka:重複上述操作,在資料來源列表中找到 Kafka,參考連線配置幫助建立 Kafka 為資料目標的連線並測試透過:
步驟三:配置 Kafka
- 建立 Kafka Topic: 在 Kafka 中建立一個 Topic,用於接收從 Oracle 同步過來的資料。
bashCopy code bin/kafka-topics.sh --create --topic my_oracle_topic --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1
步驟四:開啟同步任務
- 新建資料同步任務:透過拖拉拽的方式,在 Tapdata 的視覺化操作介面中,連線資料來源和目標,快速建立 Oracle - Kafka 的資料同步任務
- 啟動同步任務: 點選源節點與目標節點,分別選擇待同步表和目標表後即可啟動任務,Tapdata 將開始捕獲 Oracle 資料庫的資料及變更,並將其傳送到 Kafka。
步驟五:驗證同步
-
插入資料: 在 Oracle 資料庫中插入一些資料。
sqlCopy code INSERT INTO my_table (id, name) VALUES (1, 'John Doe');
-
檢查 Kafka Topic: 使用 Kafka 命令列工具檢查同步的資料是否已經到達 Kafka Topic。
bashCopy code bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic my_oracle_topic --from-beginning
如何選:綜合對比,選擇與自身需求更加匹配的方案
面對如此多的資料同步方案,在做調研時往往涉及多方考慮。綜合來看,各個型別的方案各有優劣:
① 手動配置方案
優勢:
- 定製性: 完全自定義的配置允許滿足特定業務場景的要求。
- 無額外成本: 不需要額外的軟體許可費用。
劣勢: - 複雜性: 需要手動處理所有步驟,可能會增加配置和管理的複雜性。
- 維護難度: 對於複雜的同步需求,手動配置可能導致維護難度增加。
- 時間成本: 手動配置需要更多的時間和技術經驗。
② 官方工具 OGG
優勢:
- 成熟穩定: OGG 是 Oracle 提供的官方工具,經過多年的發展和改進,具有穩定性和成熟性。
- 視覺化管理:OGG 提供了管理介面,簡化了配置和監控過程。
劣勢: - 資金成本: 付費工具且價格較高,需要一定的成本投入。
- 學習成本: 具有一定的學習門檻,尤其是對於初學者而言。
③ Tapdata 方案
優勢:
- 簡化配置: Tapdata 提供了簡化的配置介面,降低了配置複雜性,無論是操作還是維護都更加簡單
- 實時監控: 提供實時監控和報警功能,方便管理和維護。
- 低延遲: Tapdata 強調低延遲,根據任務的 tps 對任務進行拆分,適用於對實時性要求較高的場景。
- 雲原生:支援雲版本,對雲上生態融合更友好
劣勢: - 資金成本:Tapdata 本地部署版本,以及 Tapdata Cloud 到達一定鏈路數時需要支付額外費用。
- 資源佔用:需要佔用少量的資料庫資源進行日誌解析
考慮因素:
- 根據需求選擇: 根據具體需求和團隊技能,選擇適合的方案。手動配置適合對配置有深入理解的團隊,OGG適合對穩定性和功能有更高要求的場景,而 Tapdata 則適用於希望快速配置和低延遲的場景。
- 成本和效率權衡: 考慮購買費用、學習曲線和配置效率之間的權衡。
- 生態整合: 考慮工具的生態整合,特別是與已有系統和工具的整合。
總體而言,將 Oracle 資料實時同步到 Kafka 為企業提供了更靈活、高效、實時的 資料處理和分析能力,有助於構建現代化的資料架構,適應迅速變化的業務環境。透過選擇適合自身業務需求的同步方案,如 Debezium、OGG、Tapdata,併合理配置最佳化,企業可以更好地滿足實時資料處理的需求,提升業務的競爭力和應變能力。在這其中,Tapdata 以其低延遲、易用性、可擴充套件性和實時監控等特點,為企業實現 Oracle 到 Kafka 的實時同步提供了可靠的解決方案。
關於 Tapdata
Tapdata Inc.「深圳鈦鉑資料有限公司」,成立於2019年9月,核心員工來自 MongoDB、Oracle、百度、阿里、騰訊等,研發人員佔比超90%,至今已獲五源資本等多家頭部風投數千萬美元融資。已服務周生生、中國移動、中國聯通、南方電網、中國一汽、富邦銀行、羅輯思維等數十家行業標杆企業。Tapdata 堅持“開放+開源”戰略,推出 Tapdata Cloud,將無程式碼資料實時同步的能力以 SaaS 的形式免費開放,目前已積累 12,000+ 註冊使用者,覆蓋電商、金融、製造等多個行業。此外,Tapdata 社群版也已釋出,正在面向開發者逐步共享其核心功能。
Tapdata 是一個以低延遲資料移動為核心優勢構建的現代資料平臺,支援將企業核心資料實時集中到中央化資料平臺,並透過 API 或反向同步方式,為下游的互動式應用、微服務或互動式分析提供新鮮實時的資料。典型用例包括資料庫到資料庫的複製、將資料引入資料倉儲或資料湖,以及通用 ETL 處理。
產品優勢:
- 開箱即用與低程式碼視覺化操作
- 內建 100+ 資料聯結器,穩定的實時採集和傳輸能力
- 秒級響應的資料實時計算能力
- 穩定易用的資料實時服務能力
【相關閱讀】
- Tapdata Connector 實用指南:雲原生數倉場景之資料實時同步到 Databend
- Tapdata Connector 實用指南:如何將 CRM 資料從 Salesforce 實時同步到 MongoDB 等其他庫
- Tapdata Connector 實用指南:實時數倉場景之資料實時同步至 ClickHouse
- Tapdata Connector 實用指南:資料入倉場景之資料實時同步到 BigQuery