2023/06/05 データエンジニアリング合同勉強会 primeNumber Inc. / GMO Pepabo, Inc.
堤 利史 / GMO PEPABO inc.2023.06.05 データエンジニアリング合同勉強会1CDC データパイプラインを止めないために
View Slide
2自己紹介GMOペパボ株式会社技術部データ基盤チーム シニアエンジニア2020年 中途入社堤 利史 Tsutsumi Toshifumi● データエンジニア● Twitter : @tosh2230● 最近そこそこ走っています(ジム派)● スバル クロストレックがついに納車!!
3アジェンダ1. これまでのあらすじ2. 現在の状況と成果データ基盤 「Bigfoot」マスコットキャラクターBigfootくんキャラクターグッズありますhttps://suzuri.jp/zaimy/designs/13278107
1. これまでのあらすじ4
以前のデータパイプライン5事業用 RDB のレコードを Google BigQuery へ日次で転送転送手段と規模- Embulk によるバッチ転送- テーブル数は数十〜数百(事業によって異なる)- テーブルサイズは 100 GiBレベルなものも存在https://speakerdeck.com/tosh2230/yeti-yet-another-extract-transfer-infrastructure?slide=14
日次データ転送によって生じるタイムラグ6DWH で集計・分析が可能となるまでの時間= 抽出時間 + 転送時間 + ロード時間特定時点のスナップショットデータを順番に転送している一部のデータがロードできたとしても必要なデータが揃わないと集計・分析を開始できない↓サイズが大きいテーブルのデータが必要なら、その完了を待つ
Change Data Capture(CDC) とは7データベースで生じたデータの変更を捕捉すること広義には、その変更内容を他のシステムやデータストアへ転送して活用する部分も含む活用例- データレプリケーション- キャッシュ更新- 全文検索エンジンのインデックス更新
Debezium Server* を選択Debezium が提供するアプリケーション- Debezium: Kafka Connect として動作- Debezium Server: 変更イベントをメッセージングサービスへ送信(Kafkaless)8出典: https://debezium.io/documentation/reference/architecture.html* 2023年6月時点で incubating state なので、将来的に仕様が変更となる可能性があります
9CDCデータパイプライン 構成図VPCPrivate subnetVPCPrivatesubnetRDSReplicaRDSPrimaryS3FargateBatchECSEC2EFSDebeziumServerPub/SubMerged viewBigQueryChange events tableBigQuerySnapshot tableBigQueryCloudComposerIN:OUT:今回構築した範囲
AWS10- Debezium Server コンテナ*を ECS on EC2 で起動- RDS for MySQL のレプリカが出力する binlog を読み込んでテーブル別につくった Cloud Pub/Sub Topic へ送信- “変更をどこまで捕捉したか”を記録するファイルは EFS に保存* https://github.com/debezium/container-images/tree/main/server
GCP11- Pub/Sub Subscription は BigQuery Subscriptions を指定して専用テーブルに向けてストリーミングインサート- CDC レコードと従来のスナップショットテーブルのレコードをマージしたビューを社内へ公開(詳細は次スライドで)
2Merged view12つくりかた 🍳1. CDC レコード群から、Primary key ごとに最新のレコード状態を復元2. 1 の Primary key を “含まない” レコードの集合をスナップショットテーブルから抽出3. 1 と 2 を UNION ALL するChange events tableBigQuerySnapshot tableBigQueryMerged viewBigQuery1PK別の最新状態3
詳細はブログ記事をご覧ください13https://tech.pepabo.com/2023/04/20/cdc-for-realtime-analysis/
2. 現在の状況と成果14
ハンドメイドマーケット minne で稼働中15転送対象テーブル数48レコード件数/day650万
ハンドメイドマーケット minne で稼働中16転送対象テーブル数48レコード件数/day650万止まったら大変...
17あやしいところに目を光らせるVPCPrivate subnetVPCPrivatesubnetRDSReplicaRDSPrimaryS3FargateBatchECSEC2EFSDebeziumServerPub/SubMerged viewBigQueryChange events tableBigQuerySnapshot tableBigQueryCloudComposerIN:OUT:
18VPCPrivate subnetVPCPrivatesubnetRDSReplicaRDSPrimaryS3FargateBatchECSEC2EFSDebeziumServerPub/SubMerged viewBigQueryChange events tableBigQuerySnapshot tableBigQueryCloudComposerIN:OUT:RDS Connection接続が切れたら ECS Service を自動的に再起動CloudWatch Logs → EventBridge → Lambdaあやしいところに目を光らせる
19VPCPrivate subnetVPCPrivatesubnetRDSReplicaRDSPrimaryS3FargateBatchECSEC2EFSDebeziumServerPub/SubMerged viewBigQueryChange events tableBigQuerySnapshot tableBigQueryCloudComposerIN:OUT:ECS ServiceMackerel エージェントをサイドカーコンテナとして起動- コンテナ死活監視- CPU 使用率- Memory 使用率あやしいところに目を光らせる
20VPCPrivate subnetVPCPrivatesubnetRDSReplicaRDSPrimaryS3FargateBatchECSEC2EFSDebeziumServerPub/SubMerged viewBigQueryChange events tableBigQuerySnapshot tableBigQueryCloudComposerIN:OUT:Pub/Sub SubscriptionOldest unacked message age(メッセージ滞留時間)5分以上滞留している場合に Slack へ通知あやしいところに目を光らせる
安定稼働による成果21- 日次集計処理の開始時刻を 12h 前倒し→ 毎日13時 から 1時へ変更- スナップショットテーブルの更新頻度を日次から週次へ変更→ 転送コスト削減- 常に最新データが転送されている安心感週次に変更した部分
22Thank You!Thank You!