使用SeaTunnel從InfluxDB同步資料到Doris

ApacheSeaTunnel發表於2024-11-06

本文介紹瞭如何使用SeaTunnel將資料從InfluxDB同步到Doris。透過SeaTunnel強大的資料整合功能,使用者可以高效地將儲存於InfluxDB中的時間序列資料傳輸至Doris,便於資料的訪問與分析。

版本資訊:
SeaTunnel 2.3.3
InfluxDB 2.7.6
Doris 2.1.3 rc09

準備事項

SeaTunnel2.3.3的安裝過程這裡就省略了,可以參考官網文件。

SeaTunnel2.3.3安裝好以後需要刪掉兩個連線用的jar包,不然後面同步資料庫會報錯:connector-hudi-2.3.3.jarconnector-datahub-2.3.3.jar.

需要增加的jar包:seatunnel-api-2.3.3.jarseatunnel-transforms-v2-2.3.3.jarmysql-connector-java-8.0.28.jarjersey-client-1.19.4.jar,這四個jar包必須新增,不然無法同步資料執行同步指令碼直接報錯沒有某個類。

InfluxDB 2.7.6 需要做的前提事項:下面這個步驟必須要做,不然查不到資料,

InfluxDB Studio-0.2.0(這個客戶端工具有個好處,可以檢視欄位型別,方便同步檔案中的欄位型別的定義,其他的客戶端好像沒有,也有可能是我沒發現),可下載這個客戶端進行連線查詢資料。

Linux安裝influxDB 2.7.6版本後,正常使用ip:8086 可訪問influxdb UI,填寫使用者名稱、密碼、org、buckets。

同步過程及踩坑點

SeaTunnel 2.3中整合InfluxDB配置使用者名稱、密碼後,執行同步任務總是報獲取欄位異常資訊。

於是乎跟蹤SeaTunnel程式碼,發現內部一直401許可權認證失敗。於是使用InfluxDB Studio資料庫管理工具連線,輸入ui頁面相同的使用者名稱,密碼後一直報401許可權認證不透過。透過查資料發現ui頁面的使用者名稱密碼僅供ui頁面使用,不能作為資料庫本身訪問的使用者名稱密碼。

使用iInfluxDB client客戶端,查詢許可權influx v1 auth list結果為空。

使用命令分配許可權
influx v1 auth create -o orgName --read-bucket bucketId --username=username
或者:influx v1 auth create -o "組織名稱" --write-bucket bucketId(桶id,不需要引號) --read-bucket bucketId(桶id,不需要引號) --username=賬號 --password=密碼

刪除命令:influx v1 auth delete --id 'id編碼'

刪除命令中的id編碼為influx v1 auth list命令查出來的ID,下圖所示:

file

命令執行完成後需輸入兩次密碼。InfluxDB Studio資料庫管理工具再次使用此使用者名稱密碼登入成功,SeaTunnel同步成功。

同步資料配置檔案:v1.batch.config_tmp.template:

env {
  execution.parallelism = 1
  job.mode = "BATCH"
  checkpoint.interval = 10000
}
 
source {
  influxdb {
    url = "http://X.X.X.X:8086"
    token = "寫自己的token" #可有可無
    org = "自己的組織名稱"
    bucket = "自己的桶" #可有可無
    database = "自己的桶"
    username = "寫在第四步自己新建的influxdb賬號"
    password = "寫在第四步自己新建的influxdb密碼"
    epoch = "H" #這個有好幾級,可以去官網檢視
    query_timeout_sec = 600
    measurement = "prometheus_remote_write" #資料表
    fields = ["node_cpu_seconds_total", "node_memory_MemTotal_bytes"] #可有可無,配置自己的欄位
    sql = """SELECT node_cpu_seconds_total as system_cpu_usage,cpu as process_occupy_physical_memory_size,job as create_dept,node_memory_MemTotal_bytes as process_read_written_file_system_total_bytes,node_memory_MemAvailable_bytes as process_open_file_describe_quantity,time as create_time FROM "prometheus_remote_write" where time > now() - 1h"""
    where = " where time > now() - 1h" 
     #經過本人測試。上面的sql查詢的欄位必須經過重新命名,或者doris建表的欄位必須和influxdb2的欄位完全一致,不然transform 中進行轉換的時候就會成為空值,這個我還沒研究明白為什麼,研究明白了在補上說明,doris的表欄位型別也必須和influxdb2中查詢的欄位型別一致,不然資料存不到doris中。schema 重定義的事influxdb2查到的欄位和型別
     schema {
      fields {
        #node_cpu_seconds_total = FLOAT
        system_cpu_usage = FLOAT
        process_occupy_physical_memory_size = INT
        create_dept = STRING
        process_read_written_file_system_total_bytes = FLOAT
        process_open_file_describe_quantity = FLOAT
        create_time = BIGINT
      }
    }
 
  }
}
 
sink {
  Doris {
    fenodes = "X.X.X.X:8030"
    username = "賬號"
    password = "密碼"
    table.identifier = "sbyw_data_acquisition.sbyw_application_process_type_tmp"
    sink.label-prefix = "test-cdc"
    sink.enable-2pc = "true"
    sink.enable-delete = "true"
    sink.max-retries = 3
    batch_size = 10000
    result_table_name = "sbyw_application_process_type_tmp"
    doris.config {
      format = "json"
      read_json_by_line = "true"
    }
  }
}
 
 
transform {
  FieldMapper {
    source_table_name = "prometheus_remote_write"
    result_table_name = "sbyw_application_process_type_tmp"
    field_mapper = {
        #node_cpu_seconds_total = system_cpu_usage
        system_cpu_usage = system_cpu_usage
        process_occupy_physical_memory_size = process_occupy_physical_memory_size
        process_read_written_file_system_total_bytes = process_read_written_file_system_total_bytes
        process_open_file_describe_quantity = process_open_file_describe_quantity
        create_time = create_time
        create_dept = create_dept
    }
  }
}

寫好同步資料指令碼檔案執行同步命令:./bin/seatunnel.sh -c ./config/v1.batch.config_tmp.template

下面是我Doris的測試表:

file

下面是InfluxDB Studio-0.2.0客戶端查到 InfluxDB 2.7.6的資料:

file

InfluxDB 2.7.6有個坑點,它支援sql查詢,但不完全支援,它只支援常規的簡單查詢,例如下圖中的查詢就可以查詢,但是如下圖所示,可能會有人說我後面沒加group by,經過測試是不行的,即使加上group by也是無法執行,那是因為官方壓根不支援的這種查詢。

file

但是下圖這樣是可以的,InfluxDB 2官方就是這樣設計的,聚合查詢無法和單欄位進行同步查詢。

file

最後是執行結果:

file

同步到Doris的資料:

file

原文連結:https://blog.csdn.net/2401_84562349/article/details/140919192

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

相關文章