Flink CDC讀取MySQL的例子

前面轉載了Flink CDC的機制文章,原理看起來還是比較好理解的,那麼接下來很多人肯定都躍躍欲試了。

這篇文章分享一下MySQL作爲源端,使用Flink SQL如何讀取MySQL數據

注意:如果經驗有限,在進行所有的軟件安裝配置操作之前,請先仔細閱讀一遍Flink CDC官方文檔,目的主要是從文檔中獲取到Flink CDC與Flink版本對照關係及其他軟件的支持版本

本文章使用的軟件版本如下:

  • flink-1.13.3
  • flink-sql-connector-mysql-cdc-2.0.2.jar
  • 10.3.29-MariaDB-log
  • openjdk version "11.0.11" 2021-04-20

1.MySQL配置

在進行配置之前,首先你需要自行安裝MySQL,具體步驟這裏不展開說了,大家如果安裝MySQL有困難還請自己去百度一下。

當前Flink CDC官方宣稱支持的MySQL版本信息如下:

  • Database: 5.7, 8.0.x
  • JDBC Driver: 8.0.16

我這邊測試過程中使用的是MariaDB 10,也是支持的。

1.1 啓用MySQL binlog

修改my.cnf文件,增加如下信息:

server_id=1
log_bin=mysql-bin
binlog_format=ROW
expire_logs_days=30
binlog_do_db=db_a
binlog_do_db=db_b

配置項的解釋如下:

  • server_id:MySQL5.7及以上版本開啓binlog必須要配置這個選項。對於MySQL集羣,不同節點的server_id必須不同。對於單實例部署則沒有要求。
  • log_bin:指定binlog文件名和儲存位置。如果不指定路徑,默認位置爲/var/lib/mysql/。
  • binlog_format:binlog格式。有3個值可以選擇:ROW:記錄哪條數據被修改和修改之後的數據,會產生大量日誌。STATEMENT:記錄修改數據的SQL,日誌量較小。MIXED:混合使用上述兩個模式。CDC要求必須配置爲ROW。
  • expire_logs_days:bin_log過期時間,超過該時間的log會自動刪除。
  • binlog_do_db:binlog記錄哪些數據庫。如果需要配置多個庫,如例子中配置多項。切勿使用逗號分隔。

配置文件修改完畢後保存並重啓MySQL。然後進入MySQL命令行,驗證是否已啓用binlog:

SELECT variable_value as "BINARY LOGGING STATUS (log-bin) ::"
FROM information_schema.global_variables WHERE variable_name='log_bin';

返回結果如果顯示ON則表示binlog啓用。

1.2 初始化MySQL表

在MySQL中創建測試數據庫和測試表demo.products,語句如下:

create database demo;
use demo;
CREATE TABLE `products` (
  `id` int(11) NOT NULL,
  `name` varchar(20) DEFAULT NULL,
  `description` varchar(20) DEFAULT NULL,
  `weight` decimal(10,3) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ;

1.3 向MySQL表中插入測試數據

INSERT INTO demo.products
(id, name, description, weight)
VALUES(1, 'a', 'a', 20.000);
INSERT INTO demo.products
(id, name, description, weight)
VALUES(2, 'b', 'b', 30.000);
INSERT INTO demo.products
(id, name, description, weight)
VALUES(3, 'c', 'c', 40.000);
INSERT INTO demo.products
(id, name, description, weight)
VALUES(4, 'd', 'd', 50.000);

2.Flink配置

2.1 Flink下載

Flink官方網站下載flink-1.13.3軟件包,我這裏下載的版本如下:

  • flink-1.13.3-bin-scala_2.11.tgz

將下載的軟件包解壓縮到你習慣使用的軟件目錄,我這裏就直接放在Downloads目錄下了。

2.2 下載mysql-cdc jar

到flink cdc的github release頁面下載最新的jar包flink-sql-connector-mysql-cdc-2.0.2.jar

將下載好的jar包,放到2.1步解壓後flink文件夾的lib目錄下。

2.3 啓動Flink

進入flink/bin目錄,執行[./start-cluster.sh]啓動flink測試環境。

3.在Flink SQL中讀取MySQL

進入flink/bin目錄,執行[./sql-client.sh]啓動Flink SQL。

3.1 創建Flink SQL 表

CREATE TABLE mysql_binlog (
 id INT NOT NULL,
 name STRING,
 description STRING,
 weight DECIMAL(10,3),
 PRIMARY KEY(id) NOT ENFORCED
) WITH (
  'connector' = 'mysql-cdc',
  'hostname' = '192.168.0.200',
  'port' = '3306',
  'username' = 'root',
  'password' = 'passwd',
  'database-name' = 'demo',
  'table-name' = 'products'
);

3.2 執行查詢

SELECT id, UPPER(name), description, weight FROM mysql_binlog;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章