チェンジフィードの概要
変更フィードは 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 はfailed
状態に設定され、エラー タイプはErrGCTTLExceeded
になり、 GC の進行をブロックしなくなります。- 変更フィードでエラー コード
ErrGCTTLExceeded
、またはErrStartTsBeforeGC
ErrSnapshotLostByGC
が発生した場合、GC 操作はブロックされません。
前述の状態遷移図の数字の意味は次のとおりです。
- ①
changefeed pause
コマンドを実行します。 - ②
changefeed resume
コマンドを実行してレプリケーションタスクを再開します。 - ③
changefeed
操作中に回復可能なエラーが発生し、操作が自動的に再試行されます。 - ④ チェンジフィード自動再試行が成功し、
checkpoint-ts
進み続けます。 - ⑤ changefeedの自動再試行が30分を超えて失敗し、changefeedは失敗状態になります。このとき、changefeedは
gc-ttl
で指定された期間、上流GCをブロックし続けます。 - ⑥ チェンジフィードが回復不可能なエラーに遭遇し、直接失敗状態に入る。このとき、チェンジフィードは
gc-ttl
で指定された期間、上流GCをブロックし続ける。 - ⑦ changefeedのレプリケーション進行状況が
target-ts
で設定した値に到達し、レプリケーションが完了します。 - ⑧ チェンジフィードが
gc-ttl
で指定された値よりも長い期間中断されたため、GC 進行エラーが発生し、再開できません。 - ⑨ 失敗の原因が解決され、変更フィードが
gc-ttl
で指定された値よりも短い期間中断された場合は、changefeed resume
コマンドを実行してレプリケーション タスクを再開します。
チェンジフィードを操作する
コマンドラインツールcdc cli
を使用して、TiCDC クラスターとそのレプリケーションタスクを管理できます。詳細については、 TiCDC の変更フィードを管理する参照してください。
HTTP インターフェイス (TiCDC OpenAPI 機能) を使用して、TiCDC クラスターとそのレプリケーション タスクを管理することもできます。詳細については、 TiCDC オープンAPI参照してください。
TiCDC がTiUP を使用してデプロイされている場合は、 tiup cdc:v<CLUSTER_VERSION> cli
コマンドを実行してcdc cli
起動できます。 v<CLUSTER_VERSION>
v8.5.0
などの TiCDC クラスター バージョンに置き換えます。 cdc cli
直接実行することもできます。