全部產品
Search
文件中心

Hologres:使用Flink匯入

更新時間:Dec 18, 2024

Realtime ComputeFlink版(Alibaba Cloud Realtime Compute for Apache Flink,Powered by Ververica)是阿里雲基於Apache Flink構建的企業級高效能的即時巨量資料處理系統。Hologres與Flink深度連通,支援即時寫入Flink的資料,可以即時查詢寫入的資料,協助您快速搭建即時數倉。

形態說明

  • 阿里雲Realtime ComputeFlink版不進行業務儲存,所有的資料均來自於外部儲存系統持有的資料。阿里雲Realtime ComputeFlink版支援的資料存放區類型如下:

    • 源表

    源表指輸入至Flink的資料輸入源。Flink的源表指定為Hologres時,使用的是大量匯入而非流式匯入,Hologres會將全表的資料統一掃描一次後再輸出至下遊,掃描完成後本次作業結束。

    • 維表

    維表一般適用於點查詢情境(Lookup by Key),因此在Hologres中,維表建議使用行儲存,並且JOIN的欄位必須是完整的主鍵欄位。

    • 結果表

    結果表用於接收並存放經過Flink計算的結果資料,為下遊資料繼續消費提供各類讀寫介面。

  • 阿里雲Realtime ComputeFlink版還支援很多企業級進階能力,通過與Hologres深度整合,提供以下創新能力:

    • Hologres Binlog消費

    使用訊息佇列的模式消費Hologres表的Change Log。

    • Flink Catalog

    Flink支援匯入Hologres中繼資料為Catalog,在Flink全託管控制台直接讀取Hologres中繼資料,不用再手動註冊Hologres表,可以提高開發效率且能保證表結構的正確性。

    • Schema Evolution

    Flink全託管支援Schema Evolution,在Flink讀取JSON資料時,可以自動解析類型,自動建立對應表的列,支援資料模型的動態演化。

  • Hologres支援的Flink產品形態及功能如下表所示。

    產品形態

    資料存放區類型

    企業級進階能力

    描述

    源表

    結果表

    維表

    Hologres Binlog消費

    Flink Catalog

    Schema Evolution

    Flink半託管

    支援行儲存及列儲存,Binlog源表建議使用行儲存或行列共存。

    支援行儲存及列儲存

    建議使用行儲存或行列共存

    支援

    支援

    支援

    使用EMR Studio開發平台。

    Blink獨享(已停售)

    支援行儲存及列儲存,Binlog源表建議使用行儲存或行列共存。

    支援行儲存及列儲存

    建議使用行儲存或行列共存

    Hologres V0.8版本只支援行儲存,V0.9及以上版本支援行儲存及列儲存。建議使用行儲存。

    不支援

    不支援

    使用Bayes開發平台。

    推薦使用阿里雲Flink全託管。

    開源Flink1.10

    不支援

    支援行儲存及列儲存

    不支援

    不支援

    不支援

    不支援

    -

    開源Flink1.11及以上版本

    不支援

    支援行儲存及列儲存

    建議使用行儲存

    不支援

    不支援

    不支援

    從開源Flink1.11版本開始,Hologres代碼已開源。詳細內容請參見GitHub

    開源Flink1.13及以上版本

    支援批量源表

    支援行儲存及列儲存

    建議使用行儲存

    不支援

    不支援

    不支援

    從開源Flink1.11版本開始,Hologres代碼已開源。詳細內容請參見GitHub

Hologres Connector Release Note

Flink版本

阿里雲Realtime ComputeVVR版本

Hologres版本

更新資訊

相關文檔

1.17

8.0.9~8.0.10

2.1.x

2.2.x

3.0.x

  • 修複共用串連池時,註冊新的client可能死結的問題。

  • 消費binlog從狀態恢複,不再強制檢查table id。

Realtime ComputeFlink-Hologres連接器

1.17

8.0.8

2.1.x

2.2.x

結果表:

  • 新增sink.delete-strategy參數,在原有ignoredelete的基礎上,豐富了對UPDATE BEFORE類型記錄的處理方式。

Realtime ComputeFlink-Hologres連接器

1.17

8.0.7

2.1.x

維表:

  • 修複維表欄位較多時,頻繁擷取中繼資料導致作業上線逾時的問題。

通用:

  • 修複不同的表使用了多個不同的使用者,共用串連池時拋出許可權不足異常的問題。

Realtime ComputeFlink版即時消費Hologres

1.17

8.0.6

2.1.x

源表:

  • Hologres V2.1版本起下線Holohub模式,不再支援Flink通過Holohub模式消費Hologres Binlog。Flink VVR 8.0.6版本對應的Hologres Connector,支援在Hologres執行個體版本升級至V2.1後,自動將Holohub模式切換為JDBC模式,詳情請參見Flink/Blink即時消費Hologres Binlog

通用:

  • 支援通過type-mapping.timestamp-converting.legacy參數啟用正確讀寫Flink TIMESTAMP_LTZ類型,詳情請參見Flink與Hologres時區說明

1.17

8.0.5

2.0.x

2.1.x

源表:

  • Hologres執行個體為2.1及以上版本時,使用JDBC消費Binlog不再需要建立slot,詳情請參見詳見通過JDBC消費Hologres Binlog。因此,從該版本開始,當判斷Hologres執行個體的版本大於2.1時,也將不再自動建立publication和slot。

結果表:

  • 新增deduplication.enabled參數,預設為true。當設定為false時,表示結果表在寫入彙總過程中可以選擇不進行去重。該功能適用於對上遊CDC流的完全回放等情境。

  • 無主鍵表支援bulkload寫入,相比原有的jdbc_copy,寫入時使用更少的Hologres資源。

通用:

  • 支援通過connection.ssl.mode以及connection.ssl.root-cert.location參數啟用傳輸加密。

  • 為內部JDBC串連增加逾時參數,以防止在服務端異常重啟等情況下,用戶端串連出現死等的問題。

1.17

8.0.4

2.0.x

2.1.x

源表:

  • 在使用JDBC消費Binlog時會自動建立publication。然而,當對錶進行重建時,之前建立的publication並不會被自動刪除,從而導致無法消費重建表的Binlog。在此版本中,針對這類情況進行了處理,系統將會自動刪除殘留的publication。

通用:

  • 為了增加串連池參數的預設值,現在同一任務中的Hologres維表和結果表將共用串連池。

1.17

8.0.3

2.0.x

2.1.x

通用:

  • 無論Hologres執行個體版本,維表和結果表都已不再支援RPC模式。若選擇RPC模式,將自動切換為jdbc_fixed模式,如果執行個體版本較低,建議升級版本。

即時數倉Hologres連接器

1.15

6.0.7

  • 1.3.x

  • 2.0.x

  • 源表:

    適配Hologres V2.0版本,檢測到使用者串連到的是2.0及以上版本的Hologres執行個體,則自動切換Holohub Binlog模式為jdbc binlog模式。

  • 維表:

    適配Hologres V2.0版本,檢測到使用者串連到的是2.0及以上版本的Hologres執行個體,則自動切換RPC模式為jdbc_fixed模式。

  • 結果表:

    • 適配Hologres V2.0版本,檢測到使用者串連到的是2.0及以上版本的Hologres執行個體,則自動切換RPC模式為jdbc_fixed模式。

    • 新增部分列更新能力,僅支援插入Flink INSERT語句中聲明的欄位,使用此能力可以更加簡潔地表達寬表Merge情境。

  • 通用:

    Connector中發生record convert異常時,會列印出來來源資料以及目前convert的結果,方便排查髒資料問題。

  • 問題修複:

    • 修複使用者作業中不同執行個體或者資料庫使用相同connectionPoolName不拋出異常的問題。

    • 修複6.0.6版本中維表字串類型有null值時拋出null 指標的問題。

即時數倉Hologres連接器

1.15

6.0.6

1.3.x

源表:

  • JDBC模式消費Hologres Binlog不再強制設定Slotname參數,支援建立預設Slot,從Holohub模式切換更平滑。

  • 新增enable_filter_push_down參數,批量源表不再預設下推filter條件,需要設定此參數值為true

即時數倉Hologres連接器

1.15

6.0.5

1.3.x

  • 通用:作業啟動時,會在TaskManager日誌中列印所有參數資訊,方便排查問題。

  • CTAS/CDAS:支援欄位類型寬容模式,使用此模式上遊發生資料類型修改事件時,只要所修改類型與原類型的歸一化類型相同,都視作修改成功。

  • Hologres Catalog:豐富ALTER TABLE文法,支援修改Hologres物理表屬性,支援修改表名、增加列、列重新命名和修改列注釋。

1.15

6.0.3~6.0.4

1.3.x

源表:

  • 新增JDBC模式消費Hologres Binlog,此模式支援更多的資料類型,且支援自訂帳號。

  • 批量源表以及全增量源表的全量階段,支援Filter下推。

結果表:

支援以Fixed Copy的模式寫入,Fixed Copy是Hologres1.3版本新增的能力,相比通過JDBC模式進行寫入,Fixed Copy方式可以實現更高的吞吐(因為是流模式)、更低的資料延時和更低的用戶端記憶體消耗(因為不攢批)。

Hologres Catalog:

  • 支援建立Catalog時進行預設的表屬性設定。

sdkMode參數:Hologres不同類型的表都有多種模式可以選擇,此版本開始統一整理為sdkMode參數。

1.13

4.0.18

1.1及以上版本

修複Sink表上報Metrics影響寫入效能的問題。

1.13以及1.15

4.0.15以及6.0.2

1.1及以上版本

源表:

  • 從該版本開始,批量源表預設大小寫敏感。

  • 支援配置批量源表Scan操作所在事務的逾時時間。

  • 修複批量源表解析複雜字串可能失敗的問題。

  • 全增量源表新增Upsert模式。

維表:

Hologres維表支援非同步請求的逾時時間(asyncTimeoutMs)設定。

結果表:

  • 支援PARTITION BY文法,CTAS建立Hologres結果表時可以通過PARTITION BY定義分區表。

  • Metrcis支援currentSendTime指標。

1.13

4.0.13

1.1及以上版本

  • 源表支援全增量一體源表消費。

  • 支援Datastream API。

1.13

4.0.11

0.10及以上版本

支援CTAS、CDAS。

1.13

4.0.8

0.10及以上版本

結果表、源表、維表支援Hologres Catalog。

管理Hologres Catalog

1.13

3.0.0

0.9及以上版本

支援即時消費Hologres。

Flink全託管

Hologres Connector相關已知缺陷和修複版本

  • 缺陷及修複說明

    • 影響版本會明確標註,不在範圍內的沒有對應缺陷。

    • 影響版本戳記為“不涉及”,表示問題可能是Hologres引擎的缺陷,而非Connector的問題。

  • 缺陷等級說明

    • P0:建議立即升級,一旦觸發會影響線上的使用(如查詢正確性、寫入成功率等操作)。

    • P1:推薦升級,提前規避相關問題。

    • P2:選擇性升級,偶爾發生的問題,具備應該改寫方法,或重啟即可修複。

等級

缺陷描述

影響版本

修複版本

解決方案

P1

JDBC模式消費Binlog,出現Binlog Convert Failed異常,或者部分shard的資料讀取停止在某個時刻。原因是Hologres執行個體的Gateway收到後端逾時的異常資訊時,將異常返回給用戶端的過程中會存在問題,導致讀取數據卡住或資料解析失敗報錯。

不涉及

不涉及

一般在作業反壓時會更容易出現,如果作業存在資料讀取卡住的問題,可以選擇重啟作業並從最近的checkpoint恢複。

要徹底解決該問題,需要將Hologres版本升級到2.2.21及以上版本。

P2

作業上線慢或者逾時,查看Thread Dump卡在 GetTableSchema處。

不涉及

不涉及

可能存在多種情況,可以根據以下步驟依次排查:

  1. 請先驗證Flink叢集和Hologres執行個體的網路連通性

  2. 調整 jdbcRetryCount參數為1,防止內部重試無法看到異常根因。

  3. Hologres 2.0版本之前,在使用者DDL頻繁時,存在中繼資料清理不及時的問題,可能導致查詢表的Meta變慢,建議將Hologres版本升級至2.1及以上版本。

P0

通過FixedFE(對應connector中的jdbc_fixed模式)寫入Hologres的 Text,Json或Jsonb類型時,如果資料來源有不合法的字元,可能拋出預期外的異常,進一步導致當前串連所在FE節點重啟,當前FE的串連中斷。

不涉及

不涉及

如果無法保證上遊字串的合法性,建議使用jdbc模式寫入,並且為結果表開啟

remove-u0000-in-text.enabled參數。

或者將Hologres版本升級至3.0及以上版本,以繼續使用jdbc_fixed模式。

P1

在進行JDBC維表一對多join時,Flink Task出現記憶體使用量過高或者OOM 的情況。

不涉及

不涉及

Hologres1.3版本,使用prefix scan,在查詢結果大於jdbcScanFetchSize時,出現批量查詢不結束的情況。繞過方法:將jdbcScanFetchSize設定為一個大值,例如100000

要徹底解決該問題,需要升級Hologres執行個體版本至 2.0及以上版本。

P1

Binlog作業有狀態恢複時,拋出the table id parsed from checkpoint is different from the current table id的異常。原因是作業在之前運行過程中,進行了TRUNCATE或者重建表,而checkpoint中儲存的是作業初次開機時的table id,導致與當前的table id不匹配。

8.0.4

8.0.9

從8.0.9版本開始,不再強制檢查table id,而是僅輸出WARN層級日誌,以允許作業從最新狀態恢複。但仍然不推薦在binlog表作業運行時進行重建表操作。對binlog來說,這類操作會導致之前的binlog完全丟失。

P2

作業運行過程中發生反壓,查看ThreadDump發現Execution Pool卡在close或者start方法。原因是共用串連池多個client複用同一個串連池時,可能存在死結,導致串連池無法正常關閉。

8.0.5

8.0.9

建議升級版本。

P2

如果對源表進行了DELETE FROM操作之後進行全增量消費,由於增量階段沒有資料,導致全量階段會從頭開始消費所有的binlog。

8.0.6及之前版本

8.0.7

建議升級或者指定其即時間進行增量消費。

P1

維表欄位數量較多時,作業上線逾時。

8.0.6

8.0.7

建議升級版本。

P0

當在批量源表中開啟enable_filter_push_down參數後,Filter不生效,導致讀取的資料包含了一些應該被過濾掉的資料。

說明

全增量和Binlog源表不存在此問題。

8.0.5及之前版本

8.0.6

建議升級版本。

P0

通過FixedFE(對應Connector中的jdbc_fixed模式)寫入JSON或JSONB類型資料到Hologres時,如果資料來源有不合法的JSON或JSONB欄位,會導致當前串連所在FE節點重啟,當前FE的串連中斷。

8.0.5及之前版本

暫無

如果無法保證上遊JSON或JSONB字串的合法性,建議使用JDBC模式寫入。

P1

JDBC維表一對多Join時,內部出現的串連失敗等異常無法拋出,表現為非同步Join節點反壓且資料不再流動,發生機率較小。

6.0.7及之前版本

8.0.3

建議升級版本,也可以通過重啟作業暫時恢複。

P1

通過JDBC模式消費Binlog時,存在記憶體流失問題。可能的表現為作業啟動時消費速率較高,之後持續下降。

6.0.7及之前版本

6.0.7

建議升級版本,對於DataStream作業,需要使用6.0.7-1版本的依賴。

P0

JDBC模式寫入的定時Flush(由jdbcWriteFlushInterval參數控制)捕獲的異常在下條資料寫入時才會拋出,當使用者寫入流量較小時,異常被捕獲還未拋出期間有可能進行成功的checkpoint。下次失敗時會從這個不合理成功的checkpoint恢複,從而可能出現丟資料的情況。

6.0.6及之前版本

6.0.7

流量較小時容易出發此缺陷,建議升級版本,或者調整jdbcWriteFlushInterval時間大於checkpoint的間隔時間。

P2

JDBC模式消費Binlog不設定Slotname時,系統會自動建立一個Slotname。若當表名含有特殊字元或Schema名稱時,自動建立非法Slotname,無法使用,且作業將會拋出syntax error異常。

6.0.6

6.0.7

建議升級版本,對於DataStream作業,需要使用6.0.7-1版本的依賴。

P1

使用者作業中不同的Hologres執行個體或資料庫使用相同的connectionPoolName時,出現找不到表等異常。

6.0.6及之前版本

6.0.7

同一個作業使用的Hologres執行個體或者資料庫不同時,使用不同的connectionPoolName

P1

維表字串類型有null值時,會拋出NPE異常。

6.0.6

6.0.7

建議升級版本。

P0

Hologres源表預設開啟Filter下推,但如果作業也使用了Hologres維表,且寫入的DML中包含對維表非主鍵欄位的過濾條件時,維表的Filter也會被錯誤地下推,可能導致維表Join出現錯誤結果。

6.0.3~6.0.5

6.0.6

建議升級版本。

P0

多個結果表的mutatetype不同,但使用同一個connectionPoolName參數以複用串連池時,可能出現mutatetype配置被覆蓋的情況,導致配置不生效。

6.0.2及之前版本

6.0.3

將全部結果表的mutatetype都設定為InsertOrUpdate,或者為mutatetype不同的表設定不同的connectionPoolName

P1

Binlog源表DDL中聲明hg_binlog_timestamp_us欄位時拋出NPE異常。

6.0.2

6.0.3

不使用所述欄位,或者升級版本。

P1

彙報Metrics會影響結果表的寫入效能,排查表現為Sink節點的thread dump會卡在reportWriteLatency

4.0.15~4.0.17

4.0.18

選擇沒有受影響的版本。

P2

批量源表讀取字元或字元數群組類型,其中比較特殊字元時,解析字串失敗。

4.0.14及之前版本

4.0.15

清理源表中的髒資料,或者升級版本。

P2

全增量一體化源表DDL中聲明hg_binlog等Binlog專屬欄位時,消費不到全量資料。

4.0.13

4.0.14

不使用全增量功能,或者升級版本。