Apache Flink を LindormTable に接続し、Flink ジョブ内で Lindorm テーブルをディメンションテーブルまたは結果テーブルとして使用できます。これらのテーブルには、Flink SQL または Flink DataStream でアクセスできます。
背景情報
Lindorm LindormTable を Flink のディメンションテーブルまたは結果テーブルとして使用し、Flink SQL または Flink DataStream で LindormTable にアクセスできます。
接続方法の選択
LindormTable のテーブルには、作成方法に基づいて、HBase テーブル (HBase API を使用して作成・書き込みを行うテーブル) と SQL テーブル (Lindorm SQL を使用して作成・書き込みを行うテーブル) の 2 種類があります。これら 2 種類のテーブルへのアクセスには異なるインターフェースが必要です。そのため、Flink ジョブを作成する前に、コネクタタイプを決定し、それに基づいて LindormTable の接続アドレスを決定する必要があります。
アクセスするテーブルタイプの決定
Lindorm では、Lindorm SQL を使用して、開発中の Flink ジョブがアクセスする LindormTable のタイプを判断できます。
lindorm-cli (または Lindorm Insight、DMS を直接使用して) を使用して、Lindorm ワイドテーブルエンジンに接続します。
次の SQL ステートメントを実行して、テーブルの
IS_HBASE_LIKE属性を確認します。属性値が TRUE の場合、そのテーブルは HBase テーブルです。
属性値が FALSE の場合、そのテーブルは SQL テーブルです。
SHOW TABLE VARIABLES FROM table_name LIKE 'IS_HBASE_LIKE';
lindorm-cliを使用してワイドテーブルエンジンに接続する方法については、「Lindorm-cli を使用したワイドテーブルエンジンへの接続と使用」をご参照ください。SHOW TABLE VARIABLESの詳細な構文については、「SHOW VARIABLES」をご参照ください。
コネクタタイプの選択
使用する Flink 製品に応じて、LindormTable へのアクセスに使用するコネクタを決定します。
テーブルタイプ | コミュニティ Flink | Realtime Compute for Apache Flink |
HBase テーブル | (ディメンションテーブルおよび結果テーブルとしてサポート) | クラウドネイティブマルチモデルデータベース Lindorm コネクタ (ディメンションテーブルおよび結果テーブルとしてサポート) |
SQL テーブル | (結果テーブルとしてサポート) | クラウドネイティブマルチモデルデータベース Lindorm コネクタ (ディメンションテーブルおよび結果テーブルとしてサポート) |
Realtime Compute for Apache Flink は、Alibaba Cloud 上のマネージド Flink サービスです。詳細については、「Realtime Compute for Apache Flink」をご参照ください。なお、Alibaba Cloud ECS 上でオープンソース Flink を使用して構築した Flink クラスターは、上記の表ではコミュニティ Flink に分類されます。
LindormTable の接続情報の取得
シナリオ 1: オープンソースの HBase コネクターまたはクラウドネイティブなマルチモデルデータベース Lindorm コネクターの使用
このシナリオでは、接続アドレスはワイドテーブルエンジンのHBase Java API アクセスアドレス (VPC) である必要があります。
Lindorm インスタンスの詳細ページで、左側のメニューにある[データベース接続]をクリックし、[ワイドテーブルエンジン] タブを選択します。[HBase 互換アドレスによる接続] エリアで、ld-<instance-ID>-proxy-lindorm.lindorm.rds.aliyuncs.com:30020形式の VPC アドレスを取得します。[MySQL 互換アドレスによる接続] エリアで、ld-<instance-ID>-proxy-sql-lindorm.lindorm.rds.aliyuncs.com:33060形式の MySQL 互換アドレスを取得します。シナリオ 2: JDBC コネクタを使用する場合
このシナリオでは、接続アドレスはワイドテーブルエンジンの MySQL 互換アドレス (VPC) である必要があります。
Lindorm インスタンスの詳細ページで、左側のナビゲーションペインから [データベース接続] をクリックし、[ワイドテーブルエンジン] タブを選択します。[MySQL 互換アドレスを介した接続] エリアで、ld-<instance-ID>-proxy-sql-lindorm.lindorm.rds.aliyuncs.com:33060形式の MySQL 互換アドレスを取得します。
Flink ジョブが新しく作成された Lindorm ユーザーを使用して LindormTable にアクセスする場合は、そのユーザーが Flink テーブルに対する読み取りおよび書き込み権限を持っていることを確認してください。権限の付与方法については、「指定されたユーザーへの権限の付与」をご参照ください。
Lindorm ワイドテーブルの各種接続アドレスの詳細については、「ワイドテーブルエンジンの接続アドレスの表示」をご参照ください。
Flink ジョブから LindormTable にアクセスする方法
選択したリアルタイムコンピューティングフレームワークの一般的なアプローチで開発できます。ジョブで LindormTable にアクセスするには、選択したコネクタに基づいて以下のドキュメントを参照し、コンピューティングジョブから LindormTable にアクセスできるように設定してください。
前提条件
コミュニティ Flink を使用して LindormTable にアクセスするジョブを開発する場合
オープンソース HBase コネクタを使用して LindormTable にアクセスする場合は、ワイドテーブルエンジンがバージョン 2.4.3 以降であることを確認してください。
オープンソース JDBC コネクタを使用して LindormTable にアクセスする場合は、ワイドテーブルエンジンがバージョン 2.6.5.2 以降であり、MySQL 互換機能が有効化されていることを確認してください。
現在のバージョンの確認またはアップグレード方法については、「LindormTable リリースノート」および「Lindorm インスタンスのマイナーエンジンバージョンのアップグレード」をご参照ください。
Realtime Compute for Apache Flink を使用して LindormTable にアクセスするジョブを開発する場合、ワイドテーブルエンジンのバージョン制限はありません。
Flink クラスターが配置されている環境が Lindorm インスタンスとネットワーク接続されており、クライアント IP アドレスが Lindorm ホワイトリストに追加されていることを確認してください。ホワイトリストへの IP アドレスの追加方法については、「ホワイトリストの設定」をご参照ください。
コミュニティ Flink を使用したジョブ開発
オープンソース HBase コネクタ
コミュニティ Flink を使用して HBase テーブルにアクセスするジョブを開発する際、インターネット経由でテーブルにアクセスする場合、またはターゲット Lindorm インスタンスが Lindorm シングルノードインスタンスの場合は、後続の操作を実行する前に SDK をアップグレードし、設定を変更する必要があります。
詳細については、「HBase Java API を使用した LindormTable への接続と使用」のステップ 1 をご参照ください。
オープンソース HBase コネクタを使用してディメンションテーブルと結果テーブルを作成する方法については、「HBase コネクタドキュメント」をご参照ください。
オープンソース JDBC コネクタ
オープンソース JDBC コネクタを使用して LindormTable にアクセスする場合、現在は LindormTable を結果テーブルとしてのみ使用できます。全体的な使用方法については、JDBC コネクタ公式ドキュメントをご参照ください。ただし、以下の点に特に注意してください。
依存関係の要件
公式ドキュメントに記載の依存パッケージのバージョンは広範ですが、JDBC コネクタで LindormTable にアクセスする場合、使用できるバージョンは現在、以下のリストに記載されているものに限定されます。flink-connector-jdbc-core-4.0.0-2.0.jarflink-connector-jdbc-mysql-4.0.0-2.0.jarmysql-connector-j-8.3.0.jar
MySQL JDBC ドライバの依存パッケージは、コミュニティからダウンロードできます。
JDBC コネクタパラメータ
ソーステーブルおよびディメンションテーブルとしての使用はサポートされていないため、これらに関連するパラメータはサポートされていません (scan.fetch-sizeなどのscanプレフィックスを持つパラメータや、lookup.cacheなどのlookupプレフィックスを持つパラメータなど)。
一部の JDBC コネクタパラメータの推奨事項:url: 「Java JDBC API を使用したアプリケーションの開発」に従って設定することを推奨します。
username: Lindorm インスタンスで作成されたユーザー名を使用します。
password: ユーザー名のパスワード。
connector、table-name: JDBC コネクタコミュニティの推奨事項に従います。
sink パラメータ: ジョブの実際の状況に基づいて微調整します。
データ型マッピング
Flink データ型と Lindorm データ型間のマッピングは、通常 MySQL のデータ型マッピングに準拠します (JDBC コネクタのデータ型マッピングセクションを参照)。ただし、Lindorm の一部のデータ型は MySQL と一致しません。たとえば、JDBC コネクタでサポートされている以下の MySQL 型は、Lindorm ではサポートされていません。MEDIUMINT 型
DATETIME 型
BIGINT UNSIGNED 以外の UNSIGNED 型
次の例では、Flink SQL を使用して、JDBC コネクタ経由で LindormTable にアクセスするジョブを定義します。この例では、Lindorm ワイドテーブルエンジンで testflink という名前のテーブルが既に定義されていることを前提としています。
# Flink テーブルを作成し、ジョブを開始します
CREATE TABLE source_table(
c1 INT,
c2 STRING
) WITH (
'connector' = 'datagen',
'rows-per-second' = '2',
'fields.c2.length' = '5',
'fields.c1.min' = '1',
'fields.c1.max' = '100'
);
CREATE TABLE sink_table(
c1 INT,
c2 STRING
) WITH (
'connector' = 'jdbc',
'url' = 'jdbc:mysql://ld-xxxxx-proxy-lindorm.lindorm.rds.aliyuncs.com:33060/default?sslMode=disabled&allowPublicKeyRetrieval=true&useServerPrepStmts=true&useLocalSessionState=true&rewriteBatchedStatements=true&cachePrepStmts=true&prepStmtCacheSize=300&prepStmtCacheSqlLimit=50000000',
'username' = 'root',
'password' = 'root',
'table-name' = 'testflink'
);
INSERT INTO sink_table SELECT * FROM source_table;Realtime Compute for Apache Flink を使用したジョブ開発
クラウドネイティブマルチモデルデータベース Lindorm コネクタ
Realtime Compute for Apache Flink では、Flink SQL を使用して Lindorm ワイドテーブルエンジンにアクセスするジョブを開発できます。Realtime Compute for Apache Flink のジョブ開発の詳細については、「ジョブ開発の概要」をご参照ください。
コネクタを使用してディメンションテーブルと結果テーブルを作成する方法については、「クラウドネイティブマルチモデルデータベース Lindorm コネクタドキュメント」をご参照ください。