乾貨分享!帶你瞭解數棧FlinkX實時採集原理與使用

數棧DTinsight發表於2021-03-23

一、FlinkX實時採集功能的基本介紹

首先為大家介紹下FlinkX實時模組的分類,如下圖所示:
1、實時採集模組(CDC)

1)MySQL Binlog外掛

利用阿里開源的Canal元件實時從MySQL中捕獲變更資料。

2)PostgreSQL Wal外掛

PostgreSQL 實時採集是基於 PostgreSQL的邏輯複製以及邏輯解碼功能來完成的。邏輯複製同步資料的原理是,在Wal日誌產生的資料庫上,由邏輯解析模組對Wal日誌進行初步的解析,它的解析結果為ReorderBufferChange(可以簡單理解為HeapTupleData),再由Pgoutput Plugin對中間結果進行過濾和訊息化拼接後,然後將其傳送到訂閱端,訂閱端透過邏輯解碼功能進行解析。

2、訊息佇列

1)Kafka:Kafka外掛存在四個版本,根據Kafka版本的不同,外掛名稱也略有不同。具體對應關係如下表所示:
2)EMQX:EMQX 是一款完全開源,高度可伸縮,高可用的分散式MQTT訊息伺服器,適用於IoT、M2M 和移動應用程式,可處理千萬級別的併發客戶端。

3、間隔輪詢

RDB型別外掛的使用限制:

    只有RDB型別的reader外掛支援間隔輪詢
    輪詢欄位只能為數值型別或者時間型別
    輪詢欄位只能為連續遞增且不重複

4、其他

Hive外掛: Hive外掛只有寫入外掛,功能基於HDFS的寫入外掛實現,也就是說從實時採集外掛讀取,寫入Hive也支援失敗恢復的功能。
二、Binlog實時採集原理

1、什麼是Binlog

MySQL 的二進位制日誌 Binlog 可以說是 MySQL 最重要的日誌,它記錄了所有的 DDL 和 DML 語句(除了資料查詢語句Select、Show等),以事件形式記錄,還包含語句所執行的消耗的時間,MySQL的二進位制日誌是事務安全型的,Binlog 的主要目的是複製和恢復。

2、Binlog外掛基本原理

實時採集外掛的核心是如何實時捕獲資料庫資料的變更,對於MySQL資料庫而言,阿里開源的Canal已經很好的幫我們實現了基於MySQL資料庫增量日誌解析,提供增量資料訂閱和消費功能。因此這裡我們直接用Canal捕獲MySQL資料庫資料的變更資訊,基於FlinkX框架將任務簡化成指令碼的配置,基於Flink的Checkpoint機制提供了任務的故障恢復,提高了任務的容錯性。

基本步驟如下:

    任務啟動時啟動Canal執行緒
    Canal模擬MySQL slave的互動協議,偽裝自己為MySQL slave,向MySQL master傳送dump協議
    MySQL master收到dump請求,開始推送Binary Log給slave(即Canal)
    Canal解析Binary Log 物件(原始為Byte流)
    FlinkX獲取Canal解析後的物件做二次解析,封裝後傳送至下游資料來源

三、Binlog到Hive實戰

1、環境準備:確認資料庫開啟了Binlog

show variables like '%log_bin%';
2、建表

    CREATE TABLE `kudu` (  
      `id` bigint(11) NOT NULL AUTO_INCREMENT,  
      `user_id` bigint(11) DEFAULT NULL,  
      `name` varchar(255) DEFAULT NULL,  
      PRIMARY KEY (`id`)  
    ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69995740/viewspace-2764446/,如需轉載,請註明出處,否則將追究法律責任。

相關文章