1。概要
Flink CDC は、Change Data Capture (CDC) を使用してさまざまなデータベースから変更を取得する Apache Flink® のソース コネクタのセットです。CDC Connectors for Apache Flink は、データ変更をキャプチャするエンジンとして Debezium を統合します。したがって、Debezium の機能を最大限に活用できます。
2. 対応コネクタ
コネクタ | データベース | ドライブ |
---|---|---|
mongodb-cdc | MongoDB: 3.6、4.x、5.0 | MongoDB ドライバー: 4.3.4 |
mysql-cdc | MySQL: 5.6, 5.7, 8.0.x、RDS MySQL: 5.6, 5.7, 8.0.x、PolarDB MySQL: 5.6, 5.7, 8.0.x、Aurora MySQL: 5.6, 5.7, 8.0.x、MariaDB: 10.x、PolarDB ×:2.0.1 | JDBCドライバー:8.0.28 |
オーシャンベースCDC | オーシャンベース CE: 3.1.x、4.x、オーシャンベース EE: 2.x、3.x、4.x | オーシャンベースドライバー: 2.4.x |
オラクルCDC | オラクル: 11、12、19、21 | オラクルドライバー: 19.3.0.0 |
postgres-cdc | PostgreSQL: 9.6、10、11、12、13、14 | JDBCドライバー:42.5.1 |
SQLサーバー-CDC | SQLサーバー: 2012、2014、2016、2017、2019 | JDBCドライバー: 9.4.1.jre8 |
tidb-cdc | TiDB: 5.1.x、5.2.x、5.3.x、5.4.x、6.0.0 | JDBCドライバー:8.0.27 |
db2-cdc | DB2: 11.5 | DB2 ドライバー: 11.5.0.0 |
ヴィテス-CDC | 速度: 8.0.x、9.0.x | MySQL JDBC ドライバー: 8.0.26 |
3. サポートされている Flink バージョン
次の表は、Flink CDC コネクタと Flink® のバージョンの対応を示しています。
Flink CDC バージョン_ | フリンクのバージョン_ |
---|---|
1.0.0 | 1.11.* |
1.1.0 | 1.11.* |
1.2.0 | 1.12.* |
1.3.0 | 1.12.* |
1.4.0 | 1.13.* |
2.0.* | 1.13.* |
2.1.* | 1.13.* |
2.2.* | 1.13.*、1.14.* |
2.3.* | 1.13.*、1.14.*、1.15.*、1.16.0 |
2.4.* | 1.13.*、1.14*、1.15.*、1.16.*、1.17.0 |
4. 特徴
データベーススナップショットの読み取りをサポートし、障害が発生した場合でもバイナリログの読み取りを継続し、Exactly-once 処理を実行できます。
DataStream API 用の CDC コネクタを使用すると、ユーザーは Debezium や Kafka をデプロイしなくても、単一のジョブで複数のデータベースとテーブルの変更を使用できます。
Table/SQL API 用の CDC コネクタ。ユーザーは SQL DDL を使用して CDC フィードを作成し、単一テーブルの変更を監視できます。
5. テーブル/SQL API の使用法
提供されたコネクタを使用して Flink クラスターをセットアップするには、いくつかの手順が必要です。
まず、Flink クラスターの 1.17 以降のバージョン (Java 8 以降) をインストールしました。
注: Flink をインストールする必要がある場合は、著者の対応するブログ「flink 高可用性クラスターの構築 (スタンドアロン モード)」を参照してください。
この記事で使用されている jar パッケージは、flink-connector-jdbc-3.1.1-1.17.jar および flinkです。 -sql-connector-mysql-cdc -2.2.1.jar
コネクタ SQL jar をダウンロードします(または自分で構築します)。
ダウンロードした jar パッケージを FLINK_HOME/lib/ に置きます。
Flink クラスターを再起動します。
注: 現時点では、2.4 以降のバージョンは自分でコンパイルしてビルドする必要があります。この記事の著者は自分で構築してアップロードしています
6. Flink CDC を使用して MySQL でストリーミング ETL を実行する
このチュートリアルでは、Flink CDC を使用して MySQL 用のストリーミング ETL を迅速に構築する方法を説明します。
製品データを MySQL に保存し、それを別の MySQL に同期するとします。
次のセクションでは、Flink Mysql CDC を使用してそれを実現する方法を紹介します。このチュートリアルのすべての演習は Flink SQL CLI で実行され、プロセス全体で Java/Scala コードや IDE のインストールなしで標準 SQL 構文が使用されます。
アーキテクチャの概要は次のとおりです。
7. 環境の準備
インストールするMySQLデータベースを準備する必要があります。MySQLデータのインストール方法については、作者のブログ「Ubuntuデータベースのインストール(mysql)」を参照してください。
注:他のオペレーティング システムについては、他のブログに対応するデータベース インストール チュートリアルを確認してください。
8. Flink SQL CLI で Flink DDL を使用してテーブルを作成する
次のコマンドを使用して Flink SQL CLI を起動します。
./bin/sql-client.sh
CLI クライアントのようこそ画面が表示されるはずです。
まず、3 秒ごとのチェックポイントを有効にします
-- Flink SQL
Flink SQL> SET execution.checkpointing.interval = 3s;
ソース データベースの Flink SQL コードを次のように編集します。
CREATE TABLE products (
id INT NOT NULL,
name STRING,
description STRING,
PRIMARY KEY(id) NOT ENFORCED
) WITH (
'connector' = 'mysql-cdc', #引入的CDC jar包驱动,没有引入会报错提示需要引入
'hostname' = '192.168.50.163',#源数据库连接host地址,可以根据自己的具体设置,此处为笔者本机的
'port' = '3306', #源数据库端口
'username' = 'root',#源数据库账号
'password' = '*****',#源数据库密码
'database-name' = 'mydb',#源数据库
'table-name' = 'products'#源数据库表
);
Flink SQL で次のステートメントを実行して、対応するデータベース テーブルから変更されたデータをキャプチャするテーブルを作成します。
-- Flink SQL
Flink SQL> CREATE TABLE products (
id INT,
name STRING,
description STRING,
PRIMARY KEY (id) NOT ENFORCED
) WITH (
'connector' = 'mysql-cdc',
'hostname' = '192.168.50.163',
'port' = '3306',
'username' = 'root',
'password' = '****',
'database-name' = 'mydb',
'table-name' = 'products'
);
ターゲット データベースの Flink SQL コードを次のように編集します。
CREATE TABLE product (
id INT,
name STRING,
description STRING,
PRIMARY KEY (id) NOT ENFORCED
) WITH (
#引入的jdbc jar包驱动,没有引入会报错提示需要引入 flink-connector-jdbc
'connector' = 'jdbc',
#目标数据库连接url地址,可以根据自己的具体设置,此处为笔者本机的。部分高版本的MySQL需要添加useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
'url' = 'jdbc:mysql://192.168.50.163:3306/mydb1?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC',
#需要访问的数据库驱动
'driver' = 'com.mysql.cj.jdbc.Driver',
#目标数据库账号
'username' = 'root',
#目标据库密码
'password' = '***',
#目标数据库表
'table-name' = 'product'
);
Flink SQL で次のステートメントを実行して、変更されたデータをキャプチャするテーブルとターゲット データベース テーブルの間にマッピング関係を作成します。
-- Flink SQL
Flink SQL> CREATE TABLE product (
id INT,
name STRING,
description STRING,
PRIMARY KEY (id) NOT ENFORCED
) WITH (
'connector' = 'jdbc',
'url' = 'jdbc:mysql://192.168.50.163:3306/mydb1?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC',
'driver' = 'com.mysql.cj.jdbc.Driver',
'username' = 'root',
'password' = 'root',
'table-name' = 'product'
);
9. ソース データ テーブルをターゲット MySQL にロードします。
Flink SQL を使用して、テーブル プロダクトおよびテーブル クエリ プロダクト テーブルをターゲット MySQL に書き込みます。
-- Flink SQL
Flink SQL> insert into product select * from products;
具体的な操作手順は以下の通りです。
これはソース データベースであり、次の図に示すように操作によってデータが追加されます。
ターゲット データベースの同期操作は次の図に示すとおりです。
10. 実行中のジョブを表示するためのフリンクビジュアルインターフェイス
実行中の同期タスクとして赤いボックスをオンにします。
これまで、Flink CDC MySQL 同期 MySQL の最初のセクションを説明しました。その複雑な操作は後で更新されます。