MySQL からデータウェアハウスへのほとんどのパイプラインは、現在の行と以前のスナップショットを比較するスケジュールされた SELECT ベースの同期を使用しています。このアプローチでは、実行間の削除と中間更新が見逃され、大規模なテーブルスキャン中に本番データベースに大きな負荷がかかります。
変更データキャプチャ(CDC)は、MySQL のバイナリログ(binlog)から直接読み取り、発生するたびに各 INSERT、UPDATE、および DELETE を順番にキャプチャし、完全な行状態を含みます。毎時間実行される CDC パイプラインは、毎分実行されるバッチ同期と比較して根本的に信頼性が高いです。なぜなら、それは起こったすべての変更をキャプチャするからです。最新のスナップショットだけではありません。
binlog を介した CDC には、特定の MySQL 構成が必要です:ROW 形式でのバイナリロギングと完全な行イメージ(binlog_row_image=FULL)、binlog_row_value_options が PARTIAL_JSON に設定されていないこと、REPLICATION SLAVE、REPLICATION CLIENT、SELECT、RELOAD、および SHOW DATABASES 権限を持つレプリケーションユーザー、各レプリケーションクライアントに一意の server-id、およびダウンタイムをカバーする十分な binlog 保持期間(デフォルト 30 日)。
Erathos のような管理プラットフォームは、スナップショットモードの選択、server-id の衝突回避、および binlog がパージされたときの復旧ロジックを処理します。CDC が変更を正しくキャプチャしたら、BigQuery へのデータの登録はシンプルです — 各変更イベントは行操作にマッピングされます。スピードよりも完全性が優先されます:時々遅れるが決して間違っていないパイプラインは、時間通りに動作するがデータが不完全なパイプラインよりも優れています。
主要なエンティティ:企業:Erathos, BigQuery, MySQL
FAQ:なぜ binlog を介した CDC は定期的な SELECT ベースの同期よりも信頼性が高いのですか?
CDC は MySQL のバイナリログから順番に各 INSERT、UPDATE、および DELETE を完全な行状態でキャプチャします。一方、定期的な同期は現在のスナップショットしか見ず、実行間の削除と中間更新を見逃します。
出典: Hacker News · 要約:HeadlinesBriefing