使用事件溯源、Kafka和OGG從Oracle內部複製資料

banq發表於2019-09-11

OGG:Oracle GoldenGate是一個產品,它允許我們為資料庫中發生的每一項活動(Kafka)生成訊息 - 更新,插入,刪除 - 我們將全部獲取。Debezium是一個類似的產品,可以與MySQL以及許多其他資料儲存一起使用。

衍生的事件溯源實際上是從Oracle等資料庫中獲取事件,這與更常見的直接從發生事件的服務中獲取事件的做法不同。變更資料捕獲(CDC)是當前最常用的派生事件溯源,兩者雖然有區別,但是事件日誌是共同點。

當將OGG的變更資料寫入Kafka以後,例如是寫入DB.ORDERS這個主題Topic,使用Kafka Streams建立一個消費DB.ORDERS主題:

KStream<String,JsonNode> baseOrderStream = builder
                .stream(DB.ORDERS, Consumed.with(stringSerde, jsonSerde));

KStream<String, JsonNode> orderService1 = baseOrderStream
                .filter(isInsert)
                .filter(hasNonNullOrderNumber)
                .map((key,value) ->                    
KeyValue.pair(value.path("after").path("ORDER_NUMBER").asText(), 
createOrderCreatedEvent(value, ORDER_SERVICE_1)));

KStream<String, JsonNode> orderService5 = baseOrderStream
                .filter(isUpdate)
                .filter(hasNewNonNullOrderNumber)
                .map((key,value) ->                      
KeyValue.pair(value.path("after").path("ORDER_NUMBER").asText(), 
createOrderCreatedEvent(value, ORDER_SERVICE_5)));

使用事件溯源、Kafka和OGG從Oracle內部複製資料

 

相關文章