【全面解讀】Apache SeaTunnel常見問題全攻略

ApacheSeaTunnel發表於2024-11-19

file

使用SeaTunnel需要安裝Spark或者Flink這樣的引擎麼?

不需要,SeaTunnel 支援 Zeta、Spark 和 Flink 作為同步引擎的選擇,您可以選擇之一就行,社群尤其推薦使用 Zeta 這種專為同步場景打造的新一代超高效能同步引擎。Zeta 被社群使用者親切的稱為 “澤塔奧特曼”!
社群對 Zeta 的支援力度是最大的,功能也更豐富。

SeaTunnel支援哪些資料來源和資料目的地?

SeaTunnel 支援多種資料來源來源和資料目的地,您可以在官網找到詳細的列表:

  • SeaTunnel 支援的資料來源(Source)列表:https://seatunnel.apache.org/docs/connector-v2/source
  • SeaTunnel 支援的資料目的地(Sink)列表:https://seatunnel.apache.org/docs/connector-v2/sink

目前SeaTunnel支援哪些資料來源的CDC ?

目前SeaTunnel支援 MongoDB CDC、MySQL CDC、Opengauss CDC、Oracle CDC、PostgreSQL CDC、Sql Server CDC、TiDB CDC等,更多請查閱Source

支援從MySQL備庫進行CDC麼?日誌如何拉取?

支援,是透過訂閱MySQL binlog日誌方式到同步伺服器上解析binlog日誌方式進行。

MySQL CDC同步需要許可權如何開啟?

需要有對應庫和表的 select 許可權。

  1. 授權語句如下:
GRANT SHOW DATABASES, REPLICATION SLAVE, REPLICATION CLIENT ON . TO 'username'@'host' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
  1. 編輯 /etc/mysql/my.cnf 新增以下行:
[mysqld]
log-bin=/var/log/mysql/mysql-bin.log
expire_logs_days = 7
binlog_format = ROW
binlog_row_image=full
  1. 然後重啟 MySQL 服務:
service mysql restart

SQLServer CDC同步需要許可權如何開啟?

使用 SQLServer CDC 資料來源需要 SQLServer 先開啟 MS-CDC 功能,具體的操作如下:

  1. 查詢 SQLSERVER CDC Agent 是否已經開啟
   EXEC xp_servicecontrol N'querystate', N'SQLServerAGENT';
   - 如果結果是running.證明已開啟,否則需要手動開啟
  1. 不同開啟方式

2.1. 如果是 Linux 開啟 SQLSERVER CDC Agent

   /opt/mssql/bin/mssql-conf setup
# 返回結果如下
1) Evaluation (free, no production use rights, 180-day limit)
2) Developer (free, no production use rights)
3) Express (free)
4) Web (PAID)
5) Standard (PAID)
6) Enterprise (PAID)
7) Enterprise Core (PAID)
8) I bought a license through a retail sales channel and have a product key to enter.

可以根據實際情況來進行選擇,可以直接選擇 2 免費的,同時包含 agent。

選擇後設定開啟 agent。

/opt/mssql/bin/mssql-conf set sqlagent.enabled true

2.2、如果是 Windows 開啟 SQLSERVER Agent (以 SQLServer 2008 為例)

  • (1)官方文件: https://learn.microsoft.com/zh-cn/previous-versions/sql/sql-server-2008-r2/ms191454(v=sql.105)?redirectedfrom=MSDN
在“開始”選單中,依次指向“所有程式”、Microsoft SQL Server 2008 R2、“配置工具”,然後單擊“SQL Server 配置管理器”**。
在 SQL Server 配置管理器中,展開“服務”,然後單擊“SQL 代理”。
在結果窗格中,右鍵單擊任何例項,再單擊“啟動”。
SQL Server Agent 旁的圖示上和工具欄上的綠色箭頭指示 SQL Server Agent 已成功啟動。
單擊“確定”。
  • (2)啟動工作管理員-開啟服務,找到SQLServer Agent (MSSQLSERVER)" 服務(其中 "MSSQLSERVER" 可能根據 SQL Server 例項而有所不同),然後啟動服務。

3、先設定庫級別的CDC (需開通庫級別和表級別 CDC)

-- 下面設定庫級別開啟CDC,該級別下,開啟的CDC的庫下面的所有表自動開啟CDC
USE TestDB; -- 替換為實際的資料庫名稱
EXEC sys.sp_cdc_enable_db;

-- 查詢庫是否開啟CDC
SELECT name, is_cdc_enabled
FROM sys.databases
WHERE name = 'database';-- 替換為要檢查的資料庫的名稱

4、然後設定表級別的CDC

-- 下面設定表級別開啟CDC,該級別下只有顯示開啟了CDC的表才能進行CDC同步
USE TestDB; -- 替換為實際的資料庫名稱
EXEC sys.sp_cdc_enable_table
@source_schema = 'dbo',
@source_name = 'table', -- 替換為要啟用 CDC 的表的名稱
@role_name = NULL,
@capture_instance = 'table'; -- 替換為一個唯一的捕獲例項名稱

-- 查詢表是否開啟CDC
USE TestDB; -- 替換為實際的資料庫名稱

SELECT name, is_tracked_by_cdc
FROM sys.tables
WHERE name = 'table'; -- 替換為要檢查的表的名稱

這樣就可以了。

這裡多說一句,聯結器對應的 cdc 許可權開啟步驟在官網都有寫,請參照 SeaTunnel 對應的官網操作即可。

是否支援無主鍵表的CDC同步?

不支援無主鍵表的 cdc 同步。原因如下:
比如上游有 2 條一模一樣的資料,然後上游刪除或修改了一條,下游由於無法區分到底是哪條需要刪除或修改,會出現這 2 條都被刪除或修改的情況。

沒主鍵要類似去重的效果本身有點兒自相矛盾,就像辨別西遊記裡的真假悟空,到底哪個是真的。

我有一個問題,我自己無法解決

我在使用 SeaTunnel 時遇到了問題,無法自行解決。 我應該怎麼辦?有以下幾種方式可以解決:

  1. 問題列表郵件列表中搜尋看看是否有人已經問過同樣的問題並得到答案。
  2. 如果您找不到問題的答案,您可以透過這些方式聯絡社群成員尋求幫助。
  3. 中國使用者可以新增微信群助手:seatunnel1,加入社群交流群,也歡迎大家關注微信公眾號:seatunnel。

如何宣告變數?

您想知道如何在 SeaTunnel 的配置中宣告一個變數,然後在執行時動態替換該變數的值嗎? 該功能常用於定時或非定時離線處理,以替代時間、日期等變數。 用法如下:
在配置中配置變數名稱。 下面是一個sql轉換的例子(實際上,配置檔案中任何地方“key = value”中的值都可以使用變數替換):

...
transform {
  Sql {
    query = "select * from user_view where city ='${city}' and dt = '${date}'"
  }
}
...

以使用 SeaTunnel Zeta Local模式為例,啟動命令如下:

$SEATUNNEL_HOME/bin/seatunnel.sh \
-c $SEATUNNEL_HOME/config/your_app.conf \
-m local[2] \
-i city=Singapore \
-i date=20231110

您可以使用引數“-i”或“--variable”後跟“key=value”來指定變數的值,其中key需要與配置中的變數名稱相同。詳情可以參考:https://seatunnel.apache.org/docs/concept/config

如何在配置檔案中寫入多行文字的配置項?

當配置的文字很長並且想要將其換行時,您可以使用三個雙引號來指示其開始和結束:

var = """
Apache SeaTunnel is a
next-generation high-performance,
distributed, massive data integration tool.
"""

如何實現多行文字的變數替換?

在多行文字中進行變數替換有點麻煩,因為變數不能包含在三個雙引號中:

var = """
your string 1
"""${you_var}""" your string 2"""

請參閱:lightbend/config#456

如何配置SeaTunnel-E2E Test的日誌記錄相關引數?

seatunnel-e2e 的 log4j 配置檔案位於 seatunnel-e2e/seatunnel-e2e-common/src/test/resources/log4j2.properties 中。 您可以直接在配置檔案中修改日誌記錄相關引數。

例如,如果您想輸出更詳細的E2E Test日誌,只需將配置檔案中的“rootLogger.level”降級即可。

如果想學習SeaTunnel的原始碼,應該從哪裡開始?

SeaTunnel 擁有完全抽象、結構化的非常優秀的架構設計和程式碼實現,很多使用者都選擇 SeaTunnel 作為學習大資料架構的方式。 您可以從seatunnel-examples模組開始瞭解和除錯原始碼:SeaTunnelEngineLocalExample.java
具體參考:https://seatunnel.apache.org/docs/contribution/setup
針對中國使用者,如果有夥伴想貢獻自己的一份力量讓 SeaTunnel 更好,特別歡迎加入社群貢獻者種子群,歡迎新增微信:davidzollo,新增時請註明開源共建。

如果想開發自己的source、sink、transform時,是否需要了解SeaTunnel所有原始碼?

不需要,您只需要關注 source、sink、transform 對應的介面即可。

如果你想針對 SeaTunnel API 開發自己的聯結器(Connector V2),請檢視Connector Development Guide

參考影片:https://www.bilibili.com/video/BV1bJ4m1P7bq/?vd_source=e139ecc995ab936267a7991b9de55f6c

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