我正在開發一個項目,我們需要將實時更新從Oracle傳輸到一堆系統(Cassandra,Hadoop,實時處理等)。我們計劃使用Golden Gate來捕捉Oracle的變化,將它們寫入Kafka,然後讓不同的目標系統從Kafka中讀取事件。 有很多設計決策需要進行:帶有Kafka最佳實踐的Oracle變更數據捕獲
什麼數據寫入卡夫卡更新?
GoldenGate以記錄標識和更新字段的形式發出更新。這些更改可以通過以下三種方式之一寫入卡夫卡:
- 整行:對於每個字段更改,發出整行。這給出了「對象」的完整表示,但可能需要查詢才能獲得完整的行。
- 只更新的字段:最簡單的,但它是一種奇怪的工作,因爲你從來沒有一個易於訪問的對象的完整表示。如何將其寫入Hadoop?
- 事件:可能是最乾淨的格式(並且最適合Kafka),但它需要很多工作才能將db字段更新轉換爲事件。
在哪裏執行數據轉換和清理?
Oracle數據庫中的架構由第三方CRM工具生成,因此不易於使用 - 有奇怪的字段名稱,翻譯表等。這些數據可以用(a )源系統,(b)Kafka使用流處理,(c)每個目標系統。
如何確保並行消費者的按序處理?
Kafka允許每個消費者讀取不同的分區,其中每個分區保證按順序排列。需要以保證每個分區中的消息完全獨立的方式挑選主題和分區。如果我們爲每個表選擇一個主題,並根據record_id對記錄進行散列記錄,則這應該在大多數情況下都有效。但是,添加新的子對象時會發生什麼?我們需要確保它在父級使用它之前得到處理foreign_id