MySQL を同期するための Flink CDC MySQL の最新バージョン (1)

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 の最初のセクションを説明しました。その複雑な操作は後で更新されます。

おすすめ

転載: blog.csdn.net/weixin_43114209/article/details/131553658