隨著信息時代的蓬勃發(fā)展,企業(yè)對實(shí)時數(shù)據(jù)處理的需求逐漸成為推動業(yè)務(wù)創(chuàng)新和發(fā)展的重要驅(qū)動力。在這個快速變化的環(huán)境中,許多企業(yè)選擇將 Oracle 數(shù)據(jù)庫同步到 Kafka,以滿足日益增長的實(shí)時數(shù)據(jù)處理需求。本文將深入探討這一趨勢的背后原因,并通過一個真實(shí)的客戶案例來強(qiáng)調(diào)實(shí)時性在業(yè)務(wù)場景中的重要性。
為什么:理解 Oracle - Kafka 的實(shí)時同步需求
先來看一個典型的業(yè)務(wù)場景。實(shí)時庫存管理需要迅速響應(yīng)庫存變化,以確保及時的補(bǔ)貨和訂單處理。通過將 Oracle 數(shù)據(jù)同步到 Kafka,可以實(shí)現(xiàn)實(shí)時捕獲庫存變更,并將這些變更事件傳遞給下游業(yè)務(wù),如訂單系統(tǒng)、報表系統(tǒng)等。如此一來,企業(yè)得以更加靈活、實(shí)時地管理庫存,從而提高供應(yīng)鏈效率。
為什么要同步至 Kafka?
再結(jié)合 Oracle 以及 Kafka 的自身特性,我們不難總結(jié)出 Oracle 到 Kafka 數(shù)據(jù)同步背后的實(shí)際需求,這通常涉及到滿足實(shí)時數(shù)據(jù)需求、支持大規(guī)模數(shù)據(jù)處理、構(gòu)建事件驅(qū)動體系結(jié)構(gòu)以及提高整體系統(tǒng)性能等。以下是一些常見原因總結(jié):
-
實(shí)時數(shù)據(jù)流:作為一個分布式消息隊列系統(tǒng),Kafka 能夠提供高吞吐量和低延遲的實(shí)時數(shù)據(jù)處理。通過將 Oracle 數(shù)據(jù)庫同步到 Kafka,可以實(shí)現(xiàn)對數(shù)據(jù)的實(shí)時捕獲和處理,使得企業(yè)能夠更快地響應(yīng)數(shù)據(jù)變化。
-
高可用性:Kafka 通過分布式來實(shí)現(xiàn)高可用性,一個 Kafka 集群通常包含多個 Broker,每個 Broker 負(fù)責(zé)存儲一部分的數(shù)據(jù)副本,這樣即使某個 Broker 出現(xiàn)故障,其他 Broker 也可以繼續(xù)工作,從而保證服務(wù)的可用性。
-
可擴(kuò)展性:Kafka 基于其分布式架構(gòu)、消費(fèi)者組、分區(qū)和副本機(jī)制、水平擴(kuò)展能力、高并發(fā)處理能力和容錯性等方式實(shí)現(xiàn)了可擴(kuò)展性,從而能夠處理大規(guī)模的消息數(shù)據(jù),滿足高吞吐量和高并發(fā)的需求。
-
高效查詢: Kafka 憑借順序?qū)懭?、索引、二分查找和?nèi)存緩存等技術(shù),得以高效處理大規(guī)模的消息流,并保持高性能和低延遲,從而實(shí)現(xiàn)高效的數(shù)據(jù)讀取。
-
高并發(fā)寫入: Kafka 的設(shè)計理念注重高并發(fā)的數(shù)據(jù)寫入,采用了多種技術(shù),如零拷貝技術(shù)、批量處理、消息壓縮、異步處理等,提高了數(shù)據(jù)傳輸?shù)男屎吞幚淼乃俣龋軌蛱幚泶笠?guī)模的數(shù)據(jù)流。充分利用 Kafka 的高并發(fā)寫入能力,有助于業(yè)務(wù)系統(tǒng)處理大量的寫入請求,適用于需要高吞吐量的業(yè)務(wù),比如日志記錄、事件溯源等。
-
解耦數(shù)據(jù)生產(chǎn)者和消費(fèi)者:Kafka 的消息隊列模型有助于解耦數(shù)據(jù)生產(chǎn)者和消費(fèi)者之間的關(guān)系,可以使數(shù)據(jù)庫的變更與實(shí)際數(shù)據(jù)使用者(應(yīng)用程序、分析系統(tǒng)等)之間形成松耦合,從而提高整個系統(tǒng)的靈活性。
-
支持事件驅(qū)動架構(gòu):通過將 Oracle 數(shù)據(jù)同步到 Kafka,可以構(gòu)建基于事件的架構(gòu)。數(shù)據(jù)庫的變更可以作為事件流式傳輸,觸發(fā)系統(tǒng)中其他組件的動作,從而實(shí)現(xiàn)更靈活、敏捷的業(yè)務(wù)流程。
-
數(shù)據(jù)集成: Kafka 作為中間件,能夠協(xié)調(diào)不同系統(tǒng)之間的數(shù)據(jù)流,可以輕松實(shí)現(xiàn)與其他數(shù)據(jù)源和目標(biāo)的集成,促使系統(tǒng)更好地適應(yīng)復(fù)雜的數(shù)據(jù)處理和交換需求。
為什么需要實(shí)時?
與此同時,數(shù)據(jù)同步的實(shí)時性在這個過程中被不斷強(qiáng)調(diào),還是舉幾個簡單的例子:
-
實(shí)時報表和監(jiān)控系統(tǒng): 對于需要實(shí)時監(jiān)控和報表展示的業(yè)務(wù),如運(yùn)營監(jiān)控、性能監(jiān)控等,及時獲取數(shù)據(jù)庫中的數(shù)據(jù)變更是關(guān)鍵。通過實(shí)時同步到 Kafka,保障這些監(jiān)控系統(tǒng)的數(shù)據(jù)時刻處于最新狀態(tài)。
-
事件驅(qū)動架構(gòu): 許多現(xiàn)代應(yīng)用采用事件驅(qū)動架構(gòu),通過發(fā)布-訂閱模型進(jìn)行系統(tǒng)集成。在這種情況下,實(shí)時同步數(shù)據(jù)到 Kafka 是保證事件的及時傳播和處理的關(guān)鍵。
-
用戶體驗(yàn): 在需要實(shí)時交互和響應(yīng)的應(yīng)用中,用戶期望看到最新的數(shù)據(jù)狀態(tài)。例如,在在線協(xié)作或?qū)崟r通訊應(yīng)用中,用戶需要實(shí)時看到其他用戶的操作和變更。
至此,我們已經(jīng)大致了解了 Oracle 到 Kafka 數(shù)據(jù)實(shí)時同步的重要性,下面再來看一些常見的同步方案。
怎么做:數(shù)據(jù)同步方案對比
手動方案:配合開源工具
實(shí)現(xiàn) Oracle 到 Kafka 數(shù)據(jù)實(shí)時同步的手動方案涉及多個步驟,包括設(shè)置 Oracle 數(shù)據(jù)庫、配置 Kafka 環(huán)境,以及編寫同步程序。下面是一個簡單的手動方案示例,主要涉及使用 Debezium 開源工具實(shí)現(xiàn) Oracle 數(shù)據(jù)庫到 Kafka 的實(shí)時同步。
步驟一:準(zhǔn)備工作
- 安裝 Oracle 數(shù)據(jù)庫: 確保已安裝并正確配置 Oracle 數(shù)據(jù)庫。
- 安裝 Kafka: 安裝 Kafka 并啟動 ZooKeeper 服務(wù),作為 Kafka 的依賴。
- 安裝并配置 Debezium: Debezium 是一個開源的變更數(shù)據(jù)捕獲工具,用于監(jiān)聽數(shù)據(jù)庫變更并將其發(fā)送到 Kafka。下載并配置 Debezium Connector for Oracle。(https://debezium.io/)
步驟二:配置 Oracle 數(shù)據(jù)庫
- 啟用歸檔日志: 在 Oracle 數(shù)據(jù)庫中,確保歸檔日志已啟用,這是 Debezium 監(jiān)聽變更的必要條件。
sqlCopy code
ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=/archivelog';
ALTER SYSTEM SET LOG_ARCHIVE_FORMAT='arch_%t_%s_%r.arc';
- 創(chuàng)建 CDC 用戶: 創(chuàng)建一個專用于 Change Data Capture (CDC) 的用戶,并授予必要的權(quán)限。
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: 創(chuàng)建一個 JSON 配置文件,指定 Oracle 連接信息、監(jiān)控的表等信息。
jsonCopy code
{"name": "oracle-connector", // 服務(wù)注冊連接器時分配給連接器的名稱。
"config": {"connector.class": "io.debezium.connector.oracle.OracleConnector", // Oracle連接器類的名稱
"database.server.name": "my-oracle-server", //為連接器捕獲更改的 Oracle 數(shù)據(jù)庫服務(wù)器標(biāo)識并提供命名空間的邏輯名稱
"database.hostname": "your-oracle-host", //oracle實(shí)例地址
"database.port": "your-oracle-port", //oracle數(shù)據(jù)庫端口
"database.user": "cdc_user", //oracle數(shù)據(jù)庫用戶
"database.password":"cdc_password", //oracle數(shù)據(jù)庫密碼
"database.dbname":"your-oracle-database",//要從中捕獲更改的數(shù)據(jù)庫的名稱
"database.out.server.name":"oracle-server", // kafka主題
"table.include.list": "CDC_USER.MY_TABLE",//orcle中表進(jìn)行數(shù)據(jù)監(jiān)測輸出數(shù)據(jù)
"schema.history.internal.kafka.bootstrap.servers": "192.3.65.195:9092",//此連接器用于將 DDL 語句寫入和恢復(fù)到數(shù)據(jù)庫歷史主題的 Kafka 代理列表
"schema.history.internal.kafka.topic": "schema-changes.inventory" // 連接器寫入和恢復(fù) DDL 語句的數(shù)據(jù)庫歷史主題的名稱
}
}
- 啟動 Debezium Connector: 使用 Kafka Connect 啟動 Debezium Connector。
bashCopy code
bin/connect-standalone.sh config/worker.properties config/debezium-connector-oracle.properties
步驟四:驗(yàn)證同步
- 插入數(shù)據(jù): 在 Oracle 數(shù)據(jù)庫中插入一些數(shù)據(jù)。
sqlCopy code
INSERT INTO CDC_USER.MY_TABLE (ID, NAME) VALUES (1, 'John Doe');
- 檢查 Kafka 主題: 檢查 Kafka 中是否有與表變更相關(guān)的消息。
bashCopy code
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic my-oracle-server.CDC_USER.MY_TABLE --from-beginning
此處應(yīng)該能夠看到與插入操作相關(guān)的 JSON 消息。
以上只是一個簡單的示例,實(shí)際情況可能會更加復(fù)雜,具體的配置和操作可能取決于 Oracle 和 Debezium 版本的不同。在生產(chǎn)環(huán)境中,請務(wù)必遵循相關(guān)安全和最佳實(shí)踐。
經(jīng)典方案:配合 Oracle 官方工具 OGG
使用 Oracle GoldenGate (OGG) 實(shí)現(xiàn) Oracle 到 Kafka 數(shù)據(jù)實(shí)時同步的方案同樣包含多個步驟,以下是一個基本示例,以 OGG Classic Replicat 為例。請注意,具體配置仍然會因 Oracle GoldenGate 版本的不同而有所變化。
步驟一:準(zhǔn)備工作
- 安裝 Oracle GoldenGate: 安裝并配置 Oracle GoldenGate 軟件。
- 安裝 Kafka: 安裝 Kafka 并啟動 ZooKeeper 服務(wù),作為 Kafka 的依賴。
步驟二:配置 Oracle 數(shù)據(jù)庫
- 啟用歸檔日志: 確保 Oracle 數(shù)據(jù)庫的歸檔日志已啟用。
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
- 創(chuàng)建 OGG Extract: 配置 OGG Extract 用于捕獲變更數(shù)據(jù)。
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 用于將捕獲的變更數(shù)據(jù)傳輸?shù)?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 參數(shù)文件: 編輯 Replicat 參數(shù)文件,配置連接信息和目標(biāo) Kafka 主題。
plaintextCopy code
REPLICAT rep1
USERID ogguser, PASSWORD oggpassword
ASSUMETARGETDEFS
MAP source_table, TARGET kafka_topic, COLMAP (...)
- 啟動 OGG Replicat: 啟動 Replicat 進(jìn)程。
bashCopy code
./ggsci
GGSCI> START REPLICAT rep1
步驟五:驗(yàn)證同步
- 插入數(shù)據(jù): 在 Oracle 數(shù)據(jù)庫中插入一些數(shù)據(jù)。
sqlCopy code
INSERT INTO source_table (ID, NAME) VALUES (1, 'John Doe');
- 檢查 Kafka 主題: 檢查 Kafka 中是否有與表變更相關(guān)的消息。
bashCopy code
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic kafka_topic --from-beginning
新一代數(shù)據(jù)實(shí)時平臺工具:低成本、更簡單
以 Tapdata 為例,作為中國的 “Fivetran/Airbyte”, Tapdata 是一個以低延遲數(shù)據(jù)移動為核心優(yōu)勢構(gòu)建的現(xiàn)代數(shù)據(jù)平臺,內(nèi)置 100+ 數(shù)據(jù)連接器,擁有穩(wěn)定的實(shí)時采集和傳輸能力、秒級響應(yīng)的數(shù)據(jù)實(shí)時計算能力、穩(wěn)定易用的數(shù)據(jù)實(shí)時服務(wù)能力,以及低代碼可視化操作等。典型用例包括數(shù)據(jù)庫到數(shù)據(jù)庫的復(fù)制、將數(shù)據(jù)引入數(shù)據(jù)倉庫或數(shù)據(jù)湖,以及通用 ETL 處理等。
Tapdata 是一個專注于實(shí)時數(shù)據(jù)同步的工具,擁有強(qiáng)大且穩(wěn)定的數(shù)據(jù)管道能力,可以用來替換類似于 OGG/DSG 這樣的同步工具,將數(shù)據(jù)從 Oracle 、MySQL 這樣的數(shù)據(jù)庫同步到同構(gòu)或者異構(gòu)類型的數(shù)據(jù)目標(biāo)。
以下是詳細(xì)的操作教程(演示版本為 Tapdata Cloud):
步驟一:Tapdata 安裝與部署
-
注冊并登錄 Tapdata Cloud
-
安裝并部署 Tapdata: 訪問 Tapdata 官方網(wǎng)站,獲取操作指引,完成 Tapdata Agent 的安裝與部署。
注冊 Tapdata Cloud,即刻開啟您的實(shí)時數(shù)據(jù)之旅
申請試用 Tapdata 本地部署版本
步驟二:配置數(shù)據(jù)源和目標(biāo)
- 新建 Oracle 數(shù)據(jù)源:進(jìn)入 Tapdata Cloud 連接管理頁面,創(chuàng)建數(shù)據(jù)源 Oracle 的連接并測試通過。
- 新建數(shù)據(jù)目標(biāo) Kafka:重復(fù)上述操作,在數(shù)據(jù)源列表中找到 Kafka,參考連接配置幫助創(chuàng)建 Kafka 為數(shù)據(jù)目標(biāo)的連接并測試通過:
步驟三:配置 Kafka
1.創(chuàng)建 Kafka Topic: 在 Kafka 中創(chuàng)建一個 Topic,用于接收從 Oracle 同步過來的數(shù)據(jù)。
bashCopy code
bin/kafka-topics.sh --create --topic my_oracle_topic --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1
步驟四:開啟同步任務(wù)
- 新建數(shù)據(jù)同步任務(wù):通過拖拉拽的方式,在 Tapdata 的可視化操作界面中,連接數(shù)據(jù)源和目標(biāo),快速創(chuàng)建 Oracle - Kafka 的數(shù)據(jù)同步任務(wù)
- 啟動同步任務(wù): 點(diǎn)擊源節(jié)點(diǎn)與目標(biāo)節(jié)點(diǎn),分別選擇待同步表和目標(biāo)表后即可啟動任務(wù),Tapdata 將開始捕獲 Oracle 數(shù)據(jù)庫的數(shù)據(jù)及變更,并將其發(fā)送到 Kafka。
步驟五:驗(yàn)證同步
- 插入數(shù)據(jù): 在 Oracle 數(shù)據(jù)庫中插入一些數(shù)據(jù)。
sqlCopy code
INSERT INTO my_table (id, name) VALUES (1, 'John Doe');
- 檢查 Kafka Topic: 使用 Kafka 命令行工具檢查同步的數(shù)據(jù)是否已經(jīng)到達(dá) Kafka Topic。
bashCopy code
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic my_oracle_topic --from-beginning
如何選:綜合對比,選擇與自身需求更加匹配的方案
面對如此多的數(shù)據(jù)同步方案,在做調(diào)研時往往涉及多方考慮。綜合來看,各個類型的方案各有優(yōu)劣:
① 手動配置方案
優(yōu)勢:
- 定制性: 完全自定義的配置允許滿足特定業(yè)務(wù)場景的要求。
- 無額外成本: 不需要額外的軟件許可費(fèi)用。
劣勢:
- 復(fù)雜性: 需要手動處理所有步驟,可能會增加配置和管理的復(fù)雜性
- 維護(hù)難度: 對于復(fù)雜的同步需求,手動配置可能導(dǎo)致維護(hù)難度增加。
- 時間成本: 手動配置需要更多的時間和技術(shù)經(jīng)驗(yàn)。
② 官方工具 OGG
優(yōu)勢:
- 成熟穩(wěn)定: OGG 是 Oracle 提供的官方工具,經(jīng)過多年的發(fā)展和改進(jìn),具有穩(wěn)定性和成熟性。
- 可視化管理:OGG 提供了管理界面,簡化了配置和監(jiān)控過程。
劣勢:
- 資金成本: 付費(fèi)工具且價格較高,需要一定的成本投入。
- .學(xué)習(xí)成本: 具有一定的學(xué)習(xí)門檻,尤其是對于初學(xué)者而言。
③ Tapdata 方案
優(yōu)勢:
- 簡化配置: Tapdata 提供了簡化的配置界面,降低了配置復(fù)雜性,無論是操作還是維護(hù)都更加簡單
- 實(shí)時監(jiān)控: 提供實(shí)時監(jiān)控和報警功能,方便管理和維護(hù)。
- 低延遲: Tapdata 強(qiáng)調(diào)低延遲,根據(jù)任務(wù)的 tps 對任務(wù)進(jìn)行拆分,適用于對實(shí)時性要求較高的場景。
- 云原生:支持云版本,對云上生態(tài)融合更友好
劣勢:
- 資金成本:Tapdata 本地部署版本,以及 Tapdata Cloud 到達(dá)一定鏈路數(shù)時需要支付額外費(fèi)用。
- 資源占用:需要占用少量的數(shù)據(jù)庫資源進(jìn)行日志解析
考慮因素:
- 根據(jù)需求選擇: 根據(jù)具體需求和團(tuán)隊技能,選擇適合的方案。手動配置適合對配置有深入理解的團(tuán)隊,OGG適合對穩(wěn)定性和功能有更高要求的場景,而 Tapdata 則適用于希望快速配置和低延遲的場景。
- 成本和效率權(quán)衡: 考慮購買費(fèi)用、學(xué)習(xí)曲線和配置效率之間的權(quán)衡。
- 生態(tài)整合: 考慮工具的生態(tài)整合,特別是與已有系統(tǒng)和工具的集成。
總體而言,將 Oracle 數(shù)據(jù)實(shí)時同步到 Kafka 為企業(yè)提供了更靈活、高效、實(shí)時的 數(shù)據(jù)處理和分析能力,有助于構(gòu)建現(xiàn)代化的數(shù)據(jù)架構(gòu),適應(yīng)迅速變化的業(yè)務(wù)環(huán)境。通過選擇適合自身業(yè)務(wù)需求的同步方案,如 Debezium、OGG、Tapdata,并合理配置優(yōu)化,企業(yè)可以更好地滿足實(shí)時數(shù)據(jù)處理的需求,提升業(yè)務(wù)的競爭力和應(yīng)變能力。在這其中,Tapdata 以其低延遲、易用性、可擴(kuò)展性和實(shí)時監(jiān)控等特點(diǎn),為企業(yè)實(shí)現(xiàn) Oracle 到 Kafka 的實(shí)時同步提供了可靠的解決方案。
產(chǎn)品優(yōu)勢:文章來源:http://www.zghlxwxcb.cn/news/detail-846690.html
- 開箱即用與低代碼可視化操作
- 內(nèi)置 100+ 數(shù)據(jù)連接器,穩(wěn)定的實(shí)時采集和傳輸能力
- 秒級響應(yīng)的數(shù)據(jù)實(shí)時計算能力
- 穩(wěn)定易用的數(shù)據(jù)實(shí)時服務(wù)能力
【相關(guān)閱讀】文章來源地址http://www.zghlxwxcb.cn/news/detail-846690.html
- Tapdata Connector 實(shí)用指南:云原生數(shù)倉場景之?dāng)?shù)據(jù)實(shí)時同步到 Databend
- Tapdata Connector 實(shí)用指南:如何將 CRM 數(shù)據(jù)從 Salesforce 實(shí)時同步到 MongoDB 等其他庫
- Tapdata Connector 實(shí)用指南:實(shí)時數(shù)倉場景之?dāng)?shù)據(jù)實(shí)時同步至 ClickHouse
- Tapdata Connector 實(shí)用指南:數(shù)據(jù)入倉場景之?dāng)?shù)據(jù)實(shí)時同步到 BigQuery
到了這里,關(guān)于Debezium vs OGG vs Tapdata:如何實(shí)時同步 Oracle 數(shù)據(jù)到 Kafka 消息隊列?的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!