2015-05-13 42 views
5

我正在開發一個項目,我們需要將實時更新從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

回答

0

我已經實現的一個解決方案是隻發佈記錄ID到卡夫卡和消費者,使用查找到原始數據庫來獲取完整的記錄。我認爲,在問題中描述的情況下,您可能希望使用CRM工具API來查找特定記錄,而不是在代碼中對記錄查找進行逆向工程。 您是如何最終實施解決方案的?