Data Transmission Service (DTS) を使用すると、ApsaraDB RDS for MySQL インスタンスの変更データをリアルタイムで ApsaraMQ for Kafka インスタンスにストリーミングできます。これにより、分析パイプライン、イベント駆動型サービス、データウェアハウスなどの下流コンシューマーは、ソースデータベースを直接クエリすることなく、行レベルの変更に応答できます。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
ApsaraDB RDS for MySQL インスタンスおよび ApsaraMQ for Kafka インスタンスが存在すること。RDS インスタンスの作成方法については、「ApsaraDB RDS for MySQL インスタンスの作成」をご参照ください。対応バージョンの組み合わせについては、「データ同期シナリオの概要」をご参照ください。
同期されたデータを受信するためのトピックが、宛先 Kafka インスタンスに作成済みであること。「ステップ 1:トピックの作成」をご参照ください。
宛先 Kafka インスタンスに、ソース RDS MySQL インスタンスからのすべてのデータを格納できるだけの十分な空きストレージ容量が確保されていること。
課金
| 同期タイプ | 料金 |
|---|---|
| スキーマ同期および完全データ同期 | 無料 |
| 増分データ同期 | 有料です。「課金概要」をご参照ください。 |
制限事項
ソースデータベースの要件
同期対象のテーブルには、重複しないフィールド値を持つ PRIMARY KEY または一意制約 (UNIQUE constraint) が設定されている必要があります。該当しない場合、宛先に重複レコードが生成される可能性があります。
同期中にテーブル名またはカラム名を変更し、個別のテーブルを同期対象として選択した場合、1 つのタスクで最大 1,000 個のテーブルを同期できます。それ以上のテーブルを同期する場合は、複数のタスクに分割するか、データベース全体を同期してください。
スキーマ同期または完全データ同期中に、データベースまたはテーブルのスキーマを変更する DDL ステートメントを実行しないでください。実行すると、タスクが失敗します。
DTS は外部キー (foreign keys) を同期しません。ソースデータベースでのカスケード操作および削除操作は、宛先には反映されません。
物理バックアップの復元またはカスケード操作によって生成されたデータは、タスクが実行中の間はキャプチャされず、同期されません。このデータが送信先に欠落している場合、同期対象から影響を受けるデータベースおよびテーブルを削除して再追加します。詳細については、「同期対象の変更」をご参照ください。
バイナリロギングの要件:
| ソースタイプ | 要件 |
|---|---|
| ApsaraDB RDS for MySQL | デフォルトでバイナリログが有効になっています。 binlog_row_image を full に設定します。 詳細については、「インスタンスパラメーターの変更」をご参照ください。 バイナリログを少なくとも 3 日間 (7 日間を推奨) 保持します。 |
| 自己管理 MySQL | バイナリロギングを有効化します。binlog_format を row に、binlog_row_image を full に設定します。デュアルプライマリクラスターの場合、さらに log_slave_updates を ON に設定します。詳細については、「自己管理 MySQL データベース用のアカウントを作成してバイナリロギングを設定する」をご参照ください。バイナリログを少なくとも 7 日間保持します。 |
DTS がバイナリログを読み取れない場合、タスクが失敗し、データの不整合が発生する可能性があります。詳細については、「バイナリログファイルの削除」をご参照ください。
MySQL 8.0.23 以降 — 不可視カラム:
不可視カラムは同期できず、そのデータは失われます。カラムを可視にするには、以下のコマンドを実行します。
ALTER TABLE <table_name> ALTER COLUMN <column_name> SET VISIBLE;明示的なプライマリキーを持たないテーブルには、自動的に不可視のプライマリキーが付与されます。同期前にこれらのカラムを可視にしてください。「不可視カラム」および「生成された不可視プライマリキー」をご参照ください。
その他の制限事項
開始前に、パフォーマンスへの影響を評価してください。完全データ同期では、両方のデータベースに対して大量の読み取りおよび書き込みが行われます。負荷を軽減するため、非ピーク時間帯に同期を実行してください。
同時 INSERT 操作を伴う完全データ同期により、宛先のテーブルに断片化 (fragmentation) が発生します。完全同期完了後、宛先の表領域 (tablespace) はソースよりも大きくなります。
個別のテーブル(データベース全体ではなく)を同期する場合、オンライン DDL 操作に pt-online-schema-change を使用しないでください。代わりに、Data Management (DMS) を使用してください。
同期中に、他のソースから宛先 Kafka インスタンスへデータを書き込まないでください。書き込むと、データの不整合が発生します。
同期中に宛先 Kafka インスタンスまたはクラスターのスケールアップ/ダウンを実施した場合、その後で再起動してください。
DTS タスクが失敗した場合、DTS テクニカルサポートが 8 時間以内に復旧を試みます。復旧時にタスクが再起動され、タスクパラメーターが変更される場合があります。
ApsaraDB RDS for MySQL — インスタンスタイプ固有の制限事項:
| インスタンスタイプ | 制限事項 |
|---|---|
| EncDB 有効化済み | 完全データ同期はサポートされていません。 |
| 透過的データ暗号化 (TDE) 有効化済み | スキーマ同期、完全データ同期、増分データ同期のすべてがサポートされています。 |
| 読み取り専用 RDS MySQL 5.6(トランザクションログなし) | ソースデータベースとして使用できません。 |
自己管理 MySQL の特殊ケース
タスク実行中にプライマリ/セカンダリ スイッチオーバーを実行すると、タスクが失敗します。
ソースデータベースで長期間 DML 操作が実行されない場合、同期遅延 (synchronization latency) の報告が不正確になることがあります。遅延値をリセットするには、ソースデータベースで DML 操作を実行してください。データベース全体を同期する場合は、1 秒ごとに更新されるハートビートテーブルを作成してください。
DTS は、バイナリログファイルの位置を進めるために、ソースデータベースで定期的に
CREATE DATABASE IF NOT EXISTS 'test'を実行します。
ApsaraDB RDS for MySQL の特殊ケース
DTS は、バイナリログファイルの位置を進めるために、ソースデータベースで定期的に
CREATE DATABASE IF NOT EXISTS 'test'を実行します。
単一レコードサイズの上限
Kafka に書き込まれる単一レコードの最大サイズは 10 MB です。ソースの行がこの上限を超えると、DTS タスクは停止します。
この問題を回避するには、大規模フィールドを含むテーブルを同期対象から除外するか、フィルター条件を使用して oversized フィールドを除外してください。すでにテーブルが同期対象に含まれている場合は、一度削除して再追加し、大規模フィールドを除外するフィルター条件を指定してください。
サポートされる同期トポロジ
一方通行・一対一同期
一方通行・一対多同期
一方通行・多対一同期
詳細については、「同期トポロジ」をご参照ください。
同期可能な SQL 操作
| タイプ | 操作 |
|---|---|
| DML | INSERT、UPDATE、DELETE |
| DDL | CREATE TABLE、ALTER TABLE、DROP TABLE、RENAME TABLE、TRUNCATE TABLE;CREATE VIEW、ALTER VIEW、DROP VIEW;CREATE PROCEDURE、ALTER PROCEDURE、DROP PROCEDURE;CREATE FUNCTION、DROP FUNCTION、CREATE TRIGGER、DROP TRIGGER;CREATE INDEX、DROP INDEX |
データ同期タスクの作成
ステップ 1:データ同期ページへ移動
以下のいずれかの方法を使用してください。
DTS コンソール
DMS コンソール
以下のステップは、お使いの DMS コンソールのモードとレイアウトによって異なる場合があります。「シンプルモード」および「DMS コンソールのレイアウトとスタイルをカスタマイズする」をご参照ください。
ステップ 2:ソースおよび宛先データベースの構成
タスクの作成 をクリックし、タスク構成ページに移動します。
ソースおよび宛先データベースのパラメーターを構成します。
警告ソースおよび宛先データベースを構成した後、ページに表示される制限事項を必ずご確認ください。このステップをスキップすると、タスクが失敗したり、データの不整合が発生したりする可能性があります。
ソースデータベースのパラメーター
パラメーター 説明 [タスク名] 説明的な名前を入力します。DTS は自動的に名前を生成しますが、意味のある名前を付けることでタスクを識別しやすくなります。タスク名は一意である必要はありません。 [既存の接続を選択] 登録済みのデータベースインスタンスを選択すると、接続フィールドが自動的に入力されます。インスタンスが登録されていない場合は、フィールドを手動で設定します。登録手順については、「データベース接続の管理」をご参照ください。 [データベースタイプ] [MySQL] を選択します。 [アクセス方式] [Alibaba Cloud インスタンス] を選択します。 [インスタンスリージョン] ソース RDS MySQL インスタンスが存在するリージョンを選択します。 [Alibaba Cloud アカウント間でのデータレプリケーション] 同一アカウント同期の場合は、[いいえ] を選択します。 [RDS インスタンス ID] ソース RDS MySQL インスタンスを選択します。 [データベースアカウント] 同期するオブジェクトに対する読み取り権限を持つアカウントを入力します。 [データベースパスワード] データベースアカウントのパスワードを入力します。 [暗号化] [非暗号化] または [SSL 暗号化済み] を選択します。SSL 暗号化を使用するには、まず RDS インスタンスで有効にする必要があります。詳細については、「クラウド証明書を使用して SSL 暗号化を有効にする」をご参照ください。 宛先データベースのパラメーター
パラメーター 説明 既存の接続の選択 登録済みのデータベースインスタンスを選択すると、接続フィールドが自動的に埋められます。インスタンスが登録されていない場合は、フィールドを手動で構成してください。 データベースタイプ Kafka を選択します。 アクセス方法 Alibaba Cloud インスタンス を選択します。 インスタンスリージョン 宛先 Kafka インスタンスが配置されているリージョンを選択します。 Kafka インスタンス ID 宛先 Kafka インスタンスを選択します。 暗号化 セキュリティ要件に応じて、暗号化なし または SCRAM-SHA-256 を選択します。 トピック 同期されたデータを受信するトピックを選択します。 DDL 情報を格納するトピック (任意)DDL 情報を別途格納するトピックを選択します。空白のままにした場合、DDL 情報は トピック で設定したトピックに格納されます。 Kafka Schema Registry の使用 いいえ または はい を選択します。 はい を選択した場合、Avro スキーマ用に Kafka Schema Registry に登録された URL または IP アドレスを入力します。Kafka Schema Registry は、RESTful API を提供して Avro スキーマを格納および取得するサービス層です。 接続テストと続行 をクリックします。
DTS サーバーの CIDR ブロックをソースデータベースとターゲットデータベースのセキュリティ設定に追加する必要があります。 Alibaba Cloud インスタンスの場合、DTS によって自動的に追加されます。 自己管理データベースの場合、「DTS サーバーの CIDR ブロックを追加する」をご参照ください。 アクセスメソッドが Alibaba Cloud Instance ではない場合、最初に [CIDR Blocks Of DTS Servers] ダイアログボックスで [Test Connectivity] をクリックします。
ステップ 3:同期対象およびオプションの構成
オブジェクトの構成 ステップで、以下のパラメーターを設定します。
パラメーター 説明 同期タイプ 増分データ同期 がデフォルトで選択されています。スキーマ同期 および 完全データ同期 も選択して、まず履歴データを同期します。これは、増分同期のベースラインとなります。 説明宛先が ApsaraMQ for Kafka インスタンスの場合、スキーマ同期 は利用できません。
競合テーブルの処理モード 事前チェックとエラー報告: 両方のデータベースに同一のテーブル名が存在する場合、事前チェックは失敗します。オブジェクト名マッピングを使用して、競合するテーブルの名前を変更します。エラーを無視して続行: チェックをスキップします。ソースデータベースとターゲットデータベースのスキーマが同じで、ターゲットのレコードがソースのレコードと同じプライマリキー値または一意キー値を持つ場合、全量同期ではターゲットの既存のレコードが保持され、増分同期ではターゲットの既存のレコードが上書きされます。スキーマが一致しない場合、初期化に失敗することがあります。 Kafka 内のデータ形式 DTS Avro:DTS Avro スキーマを使用して解析されたデータ。「GitHub 上のスキーマ定義」をご参照ください。Canal JSON:Canal JSON 形式のデータ。「Canal JSON」セクションをご参照ください。 Kafka データ圧縮形式 ワークロードに応じて選択します:LZ4(デフォルト)— 圧縮率が低く、高速;GZIP — 圧縮率が高く、速度が遅く、CPU 使用率が高い;Snappy — 圧縮率と速度のバランスが取れています。 Kafka パーティションへのデータ送信ポリシー パーティションルーティングポリシーを選択します。詳細については、「Kafka パーティションへのデータ移行ポリシーの指定」をご参照ください。 メッセージ確認応答メカニズム 信頼性要件に応じて構成します。「メッセージ確認応答メカニズム」をご参照ください。 宛先インスタンスにおけるオブジェクト名の大文字小文字 [DTS デフォルトポリシー] を選択するか、ソースまたはターゲットデータベースの大文字小文字の区別に一致する他のオプションを選択します。詳細については、「宛先インスタンスにおけるオブジェクト名の大文字小文字の区別の指定」をご参照ください。 ソースオブジェクト 1 つ以上のオブジェクトを選択し、
をクリックして 選択済みオブジェクト に追加します。同期対象として選択できるのはテーブルのみです。選択済みオブジェクト オブジェクト名マッピング機能を使用して、宛先トピック、パーティション数、各テーブルのパーティションキーを設定します。「オブジェクト名マッピング機能の使用」をご参照ください。特定のテーブルに対して特定の SQL 操作をフィルターするには、選択済みオブジェクト 内のオブジェクトを右クリックし、操作を選択します。注:オブジェクトの名前を変更すると、依存オブジェクトが破損する可能性があります。 次へ:高度な設定 をクリックし、以下のパラメーターを構成します。
パラメーター 説明 タスクスケジューリング専用クラスター DTS 専用クラスターとはデフォルトでは、DTS がタスクを共有クラスターにスケジュールします。安定性を向上させるために、専用クラスターをご購入ください。詳細については、「」をご参照ください。 接続失敗時の再試行時間 DTS が接続失敗時に再試行する時間範囲です。有効な値:10~1440 分。デフォルト値:720 分。30 分を超える値を設定してください。複数のタスクが同一のソースデータベースまたはターゲットデータベースを共有する場合、最も短い再試行時間が適用されます。再試行中も DTS インスタンスに対して課金されます。 その他のエラー発生時の再試行時間 DTS が DDL 操作または DML 操作の失敗時に再試行する時間範囲です。有効な値:1~1440 分。デフォルト値:10 分。10 分を超える値を設定してください。この値は、「接続失敗時の再試行時間」より小さくする必要があります。 完全データ同期におけるレート制御の有効化 完全同期中の読み取り QPS(クエリ/秒)および書き込みスループットを制限し、ターゲットデータベースへの負荷を軽減します。「ソースデータベースへのクエリ/秒 (QPS)」「完全データ移行の RPS」「完全移行時のデータ移行速度 (MB/s)」の各パラメーターを設定します。このオプションは、「完全データ同期」が選択されている場合のみ利用可能です。 増分データ同期におけるレート制御の有効化 増分同期時の書き込みスループットを制限するため、「増分データ同期の RPS」および「増分同期時のデータ同期速度 (MB/s)」の各パラメーターを設定します。 転送および逆再生タスクのハートビートテーブルに対する SQL 操作の削除有無 はい:DTS はソースデータベースにハートビート SQL を書き込みません。タスクに同期遅延が発生する可能性があります。いいえ:DTS はソースデータベースにハートビート SQL を書き込みます。ソースデータベースに対する物理バックアップやクローン操作に影響が出る場合があります。 環境タグ (任意)この DTS インスタンスを識別するための環境タグを割り当てます。 ETL の設定 はいデータ移行またはデータ同期タスクにおける ETL の設定:データ処理文を入力して、抽出・変換・書き出し(ETL)処理を設定します。詳細については、「」をご参照ください。いいえ:ETL をスキップします。 モニタリングとアラート はいDTS タスク作成時のモニタリングとアラート設定:アラートのしきい値および通知先連絡先を設定します。タスクが失敗した場合、または同期遅延がしきい値を超えた場合に、DTS からアラートが送信されます。詳細については、「」をご参照ください。いいえ:アラート機能を無効化します。
ステップ 4:事前チェックの実行
次へ:タスク設定の保存および事前チェック をクリックします。この構成の OpenAPI パラメーターをプレビューするには、次へ:タスク設定の保存および事前チェック にマウスをホバーし、続行する前に OpenAPI パラメーターのプレビュー をクリックします。
同期タスクの開始前に、DTS が事前チェックを実行します。すべての事前チェック項目が合格した場合にのみ、タスクが開始されます。
事前チェック項目のいずれかが失敗した場合、詳細の表示 をクリックして原因を確認し、問題を修正してから 再チェック をクリックしてください。事前チェック項目でアラートが生成された場合:
アラートを無視できない場合は、問題を修正して再チェックを実行してください。
アラートを無視できる場合は、アラート詳細の確認 をクリックし、ダイアログボックスで 無視 をクリックして OK をクリックした後、再チェック をクリックしてください。アラートを無視すると、データの不整合が発生する可能性があります。
ステップ 5:インスタンスの購入および開始
成功率 が 100% に達するまで待ち、次へ:インスタンスの購入 をクリックします。
購入 ページで、以下のパラメーターを構成します。
パラメーター 説明 課金方法 サブスクリプション:前払い方式。長期利用に適しており、コスト効率が優れています。従量課金:時間単位で課金されます。短期利用に適しています。不要になったらインスタンスを解放して、継続的な課金を回避してください。 リソースグループ設定 このインスタンスのリソースグループを選択します。デフォルト: デフォルトリソースグループResource Management とは インスタンスクラス 必要な同期スループットに基づいてインスタンスクラスを選択します。「データ同期インスタンスのインスタンスクラス」をご参照ください。 サブスクリプション期間 (サブスクリプションのみ)期間を設定します:1~9 か月、1 年、2 年、3 年、または 5 年。 Data Transmission Service(従量課金)サービス利用規約 を読み、チェックボックスをオンにしてください。
購入および開始 をクリックし、ダイアログボックスで OK をクリックします。
タスクはタスクリストに表示されます。そこから進行状況を監視できます。
オブジェクト名マッピング機能の使用
オブジェクト名マッピング機能を使用すると、各ソーステーブルから特定の Kafka トピックへのデータルーティング、パーティション数の設定、およびパーティションキーの定義が可能です。
選択済みオブジェクト セクションで、テーブル名にマウスをホバーします。
右クリックして 編集 を選択します。
テーブルの編集 ダイアログボックスで、以下のパラメーターを構成します。
パラメーター 説明 テーブル名 宛先トピックの名前を入力します。デフォルトでは、宛先データベース セクションで設定したトピックになります。宛先が ApsaraMQ for Kafka インスタンスの場合、トピックは事前に存在している必要があります(DTS はトピックを作成しません)。宛先が自己管理 Kafka クラスターであり、スキーマ同期が含まれている場合、DTS はトピックの作成を試みます。 フィルター条件 同期対象の行をフィルターする SQL 条件を指定します。「フィルター条件の指定」をご参照ください。 パーティション数 宛先トピックのパーティション数を設定します。 パーティションキー データを Kafka パーティションに送信するポリシー が プライマリキーのハッシュ値に基づいてデータを個別のパーティションに送信 に設定されている場合に利用可能です。1 つ以上のカラムをパーティションキーとして指定します。DTS は、これらのカラムのハッシュ値に基づいて行をパーティションにルーティングします。カラムをパーティションキーとして選択するには、まず すべてのテーブルを同期 のチェックを解除してください。 OK をクリックします。
よくある質問
タスク作成後に、Kafka データ圧縮形式またはメッセージ確認応答メカニズムを変更できますか?
はい。オブジェクト変更機能を使用して、これらの設定を変更できます。「同期対象オブジェクトの変更」をご参照ください。