SeaTunnel JDBC DB2 Sink Connector支援的工作原理,快來學習吧!

ApacheSeaTunnel發表於2024-04-19

file
DB2是IBM的一款關係型資料庫管理系統,JDBC DB2 Source Connector是一個用於透過JDBC讀取外部資料來源資料的聯結器。Apache SeaTunnel如何支援JDBC DB2 Sink Connector?請參考本文件。

支援引擎

Spark

Flink

SeaTunnel Zeta

主要功能

使用 Xa 事務 來確保 精確一次性。因此,只支援對支援 Xa 事務 的資料庫進行 精確一次性 操作。您可以設定 is_exactly_once=true 來啟用它。

描述

透過 JDBC 寫入資料。支援批處理模式和流式模式,支援併發寫入,支援精確一次性語義(使用 XA 事務保證)。

支援的資料來源資訊

資料來源 支援的版本 驅動程式 URL Maven
DB2 不同的依賴版本有不同的驅動程式 com.ibm.db2.jdbc.app.DB2Driver jdbc:db2://127.0.0.1:50000/dbname 下載

資料庫依賴

請下載與 'Maven' 相對應的支援列表,並將其複製到 '$SEATNUNNEL_HOME/plugins/jdbc/lib/' 工作目錄中

例如,對於 DB2 資料來源:cp db2-connector-java-xxx.jar $SEATNUNNEL_HOME/plugins/jdbc/lib/

資料型別對映

file

Sink 選項

名稱 型別 必填 預設值 描述
url 字串 - JDBC 連線的 URL。例如:jdbc:db2://127.0.0.1:50000/dbname
driver 字串 - 用於連線到遠端資料來源的 JDBC 類名,如果使用 DB2,則值為 com.ibm.db2.jdbc.app.DB2Driver
user 字串 - 連線例項的使用者名稱
password 字串 - 連線例項的密碼
query 字串 - 使用此 SQL 將上游輸入資料寫入資料庫。例如 INSERT ...query 具有更高的優先順序。
database 字串 - 使用此 databasetable-name 自動生成 SQL,並接收上游輸入資料寫入資料庫。此選項與 query 互斥,並具有更高的優先順序。
table 字串 - 使用資料庫和此表名自動生成 SQL,接收上游輸入資料寫入資料庫。此選項與 query 互斥,並具有更高的優先順序。
primary_keys 陣列 - 此選項用於支援自動生成 SQL 時的 insertdeleteupdate 操作。
support_upsert_by_query_primary_key_exist 布林 false 根據查詢主鍵是否存在選擇使用 INSERT SQL、UPDATE SQL 處理更新事件(INSERT、UPDATE_AFTER)。此配置僅在資料庫不支援 upsert 語法時使用。請注意,此方法效能較低。
connection_check_timeout_sec 整數 30 用於等待驗證連線的資料庫操作完成的時間(以秒為單位)。
max_retries 整數 0 提交失敗(executeBatch)的重試次數。
batch_size 整數 1000 用於批處理寫入,當緩衝記錄數量達到 batch_size 或時間達到 batch_interval_ms 時,資料將重新整理到資料庫。
batch_interval_ms 整數 1000 用於批處理寫入,當緩衝記錄數量達到 batch_size 或時間達到 batch_interval_ms 時,資料將重新整理到資料庫。
is_exactly_once 布林 false 是否啟用精確一次性語義,將使用 XA 事務。如果啟用,需要設定 xa_data_source_class_name
generate_sink_sql 布林 false 基於要寫入的資料庫表自動生成 SQL 語句。
xa_data_source_class_name 字串 - 資料庫驅動程式的 XA 資料來源類名,例如,DB2 為 com.db2.cj.jdbc.Db2XADataSource。其他資料來源請參考附錄。
max_commit_attempts 整數 3 事務提交失敗的重試次數。
transaction_timeout_sec 整數 -1 事務開啟後的超時時間,預設為 -1(永不超時)。請注意,設定超時可能會影響精確一次性語義。
auto_commit 布林 true 預設啟用自動事務提交。
common-options - Sink 外掛的通用引數,請參考 Sink Common Options 獲取詳細資訊。

提示

如果未設定 partition_column,則將以單一併發方式執行;如果設定了 partition_column,則根據任務的併發度並行執行。

任務示例

簡單示例:

該示例定義了一個 SeaTunnel 同步任務,透過 FakeSource 自動生成資料併傳送到 JDBC Sink。FakeSource 生成總共 16 行資料(row.num=16),每行有兩個欄位,name(字串型別)和 age(整數型別)。最終的目標表是 test_table,在表中也將有 16 行資料。在執行此作業之前,您需要在您的 DB2 中建立資料庫 test 和表 test_table。如果您尚未安裝和部署 SeaTunnel,請按照 安裝 SeaTunnel 中的說明安裝和部署 SeaTunnel。然後按照 使用 SeaTunnel 引擎快速入門 中的說明執行此作業。

# 定義執行時環境
env {
  # 您可以在這裡設定 Flink 配置
  execution.parallelism = 1
  job.mode = "BATCH"
}

source {
  # 這是一個示例源外掛,僅用於測試和演示源外掛功能
  FakeSource {
    parallelism = 1
    result_table_name = "fake"
    row.num = 16
    schema = {
      fields {
        name = "string"
        age = "int"
      }
    }
  }
  # 如果您想要獲取更多關於如何配置 SeaTunnel 並檢視完整的源外掛列表的資訊,
  # 請訪問 https://seatunnel.apache.org/docs/category/source-v2
}

transform {
  # 如果您想要獲取更多關於如何配置 SeaTunnel 並檢視完整的轉換外掛列表的資訊,
  # 請訪問 https://seatunnel.apache.org/docs/category/transform-v2
}

生成 Sink SQL

該示例不需要編寫複雜的 SQL 語句,您可以配置資料庫名稱和表名稱,以自動生成要插入的語句。

sink {
    jdbc {
        url = "jdbc:db2://127.0.0.1:50000/dbname"
        driver = "com.ibm.db2.jdbc.app.DB2Driver"
        user = "root"
        password = "123456"
        query = "insert into test_table(name,age) values(?,?)"
        }
  #  如果您想要獲取更多關於如何配置 SeaTunnel 並檢視完整的接收外掛列表的資訊,
  #  請訪問 https://seatunnel.apache.org/docs/category/sink-v2
}

sink {
    jdbc {
        url = "jdbc:db2://127.0.0.1:50000/dbname"
        driver = "com.ibm.db2.jdbc.app.DB2Driver"
        user = "root"
        password = "123456"
        # 根據資料庫表名自動生成 SQL 語句
        generate_sink_sql = true
        database = test
        table = test_table
    }
}

精確一次性:

為了確保精確寫入場景,我們保證精確一次性。
sink {
jdbc {
url = "jdbc:db2://127.0.0.1:50000/dbname"
driver = "com.ibm.db2.jdbc.app.DB2Driver"

    max_retries = 0
    user = "root"
    password = "123456"
    query = "insert into test_table(name,age) values(?,?)"

    is_exactly_once = "true"

    xa_data_source_class_name = "com.db2.cj.jdbc.Db2XADataSource"
}

}

本文由 白鯨開源 提供釋出支援!

相關文章