チェンジフィードの概要
変更フィードはTiCDCのレプリケーションタスクであり、TiDBクラスター内の指定されたテーブルのデータ変更ログを指定されたダウンストリームに複製します。TiCDCクラスター内で複数の変更フィードを実行および管理できます。
チェンジフィード状態転送
レプリケーションタスクの状態は、レプリケーションタスクの実行状況を表します。TiCDCの実行中、レプリケーションタスクはエラーで失敗したり、手動で一時停止、再開されたり、指定されたTargetTsに達したりすることがあります。これらの動作により、レプリケーションタスクの状態が変化する可能性があります。このセクションでは、TiCDCのレプリケーションタスクの状態と、状態間の転送関係について説明します。

上記の状態転送図の各状態は次のように説明されます。
Normal: レプリケーションタスクは正常に実行され、チェックポイントTSも正常に進行します。この状態で変更フィードを実行すると、GCの進行がブロックされます。Stopped: ユーザーが手動で変更フィードを一時停止したため、レプリケーションタスクは停止しています。この状態の変更フィードはGC操作をブロックします。Warning: レプリケーションタスクがエラーを返しました。回復可能なエラーのため、レプリケーションを続行できません。この状態の変更フィードは、状態がNormalに遷移するまで再開を試行し続けます。デフォルトの再試行時間は30分です(changefeed-error-stuck-durationで調整可能)。この時間を超えると、変更フィードは失敗状態になります。この状態の変更フィードはGC操作をブロックします。Finished: レプリケーションタスクが終了し、設定された値TargetTsに達しました。この状態では、変更フィードはGC操作をブロックしません。Failed: レプリケーションタスクが失敗しました。この状態の変更フィードは再開を試行しません。障害に対処するための十分な時間を確保するため、この状態の変更フィードはGC操作をブロックします。ブロックの期間はgc-ttlパラメータで指定され、既定値は24時間です。この期間内に根本的な問題が解決された場合は、変更フィードを手動で再開できます。そうでない場合、変更フィードがgc-ttl期間を超えてこの状態のままである場合、レプリケーションタスクは再開できず、回復もできません。
注記:
- GCがchangefeedによってブロックされた場合、changefeedは
gc-ttlで指定された時間までGCの進行をブロックします。その後、changefeedはエラータイプがErrGCTTLExceededである状態failedに設定され、GCの進行をブロックしなくなります。- 変更フィードでエラー コード
ErrGCTTLExceeded、またはErrStartTsBeforeGCErrSnapshotLostByGCが発生した場合、GC 操作はブロックされません。
上記の状態遷移図の数字は以下のように表されます。
- ① コマンド
changefeed pauseを実行します。 - ②
changefeed resumeコマンドを実行してレプリケーションタスクを再開します。 - ③
changefeed操作中に回復可能なエラーが発生し、操作が自動的に再試行されます。 - ④ チェンジフィード自動リトライが成功し、
checkpoint-ts進み続けます。 - ⑤ changefeedの自動リトライが30分を超えて失敗し、changefeedは失敗状態になります。このとき、changefeedは
gc-ttlで指定された期間、上流GCをブロックし続けます。 - ⑥ changefeed は回復不能なエラーに遭遇し、直接 failed 状態に移行します。このとき、changefeed は
gc-ttlで指定された期間、上流の GC をブロックし続けます。 - ⑦ changefeedのレプリケーション進行状況が
target-tsで設定した値に到達し、レプリケーションが完了します。 - 8 チェンジフィードが
gc-ttlで指定された値よりも長い期間中断されたため、GC 進行エラーが発生し、再開できません。 - ⑨ 失敗の原因が解決され、変更フィードが
gc-ttlで指定された値よりも短い期間中断された場合は、changefeed resumeコマンドを実行してレプリケーション タスクを再開します。
チェンジフィードを操作する
TiCDCクラスターとそのレプリケーションタスクは、コマンドラインツールcdc cli使用して管理できます。詳細については、 TiCDC の変更フィードを管理する参照してください。
HTTPインターフェース(TiCDC OpenAPI機能)を使用して、TiCDCクラスターとそのレプリケーションタスクを管理することもできます。詳細については、 TiCDC オープンAPI参照してください。
TiCDC がTiUPを使用してデプロイされている場合は、 tiup cdc:v<CLUSTER_VERSION> cliコマンドを実行することでcdc cli起動できます。 v<CLUSTER_VERSION> TiCDC クラスターのバージョン(例: v8.5.3 )に置き換えてください。 cdc cli直接実行することもできます。