Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
CDCデータパイプラインを止めないために / One Stream of the CDC
Search
Toshifumi Tsutsumi
June 07, 2023
Programming
0
1.4k
CDCデータパイプラインを止めないために / One Stream of the CDC
2023/06/05 データエンジニアリング合同勉強会
primeNumber Inc. / GMO Pepabo, Inc.
Toshifumi Tsutsumi
June 07, 2023
Tweet
Share
More Decks by Toshifumi Tsutsumi
See All by Toshifumi Tsutsumi
ModuleNotFoundErrorの傾向と対策:仕組みから学ぶImport / Unpacking ModuleNotFoundError
tosh2230
3
5.1k
ニアリアルタイム分析の実現に向けたChange Data Captureの導入 / Change data capture for near realtime analytics
tosh2230
3
1.9k
データリネージの組織導入事例と今後の戦略 / Introduction to an example of data lineage in GMO Pepabo
tosh2230
0
980
SQLクエリ解析によるE2Eデータリネージの実現 / E2E-data-lineage
tosh2230
0
3.6k
データ抽出基盤 Yeti をつくっている話 / Yeti - Yet another Extract-Transfer Infrastructure
tosh2230
1
4.9k
Loggingモジュールではじめるログ出力入門 / Introduction to Python Logging
tosh2230
32
14k
データ基盤チームの設立と直近の取り組み / the-establishment-of-pepabo-data-platform-team
tosh2230
5
4.4k
Other Decks in Programming
See All in Programming
Going Structural with Named Tuples
bishabosha
0
200
SEAL - Dive into the sea of search engines - Symfony Live Berlin 2025
alexanderschranz
1
120
Deoptimization: How YJIT Speeds Up Ruby by Slowing Down / RubyKaigi 2025
k0kubun
0
400
英語 × の私が、生成AIの力を借りて、OSSに初コントリビュートした話
personabb
0
180
AIコードエディタの基盤となるLLMのFlutter性能評価
alquist4121
0
190
これだけは知っておきたいクラス設計の基礎知識 version 2
masuda220
PRO
24
5.9k
remix + cloudflare workers (DO) docker上でいい感じに開発する
yoshidatomoaki
0
120
サービスレベルを管理してアジャイルを加速しよう!! / slm-accelerate-agility
tomoyakitaura
1
140
リアルタイムレイトレーシング + ニューラルレンダリング簡単紹介 / Real-Time Ray Tracing & Neural Rendering: A Quick Introduction (2025)
shocker_0x15
1
290
Vibe Codingをせずに Clineを使っている
watany
17
5.9k
PHP で学ぶ OAuth 入門
azuki
1
120
Java 24まとめ / Java 24 summary
kishida
3
440
Featured
See All Featured
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
178
52k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
23
2.6k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
47
2.4k
Designing Experiences People Love
moore
141
23k
Designing for humans not robots
tammielis
252
25k
Unsuck your backbone
ammeep
670
57k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.3k
Git: the NoSQL Database
bkeepers
PRO
430
65k
Statistics for Hackers
jakevdp
798
220k
Measuring & Analyzing Core Web Vitals
bluesmoon
7
380
Making the Leap to Tech Lead
cromwellryan
133
9.2k
Mobile First: as difficult as doing things right
swwweet
223
9.6k
Transcript
堤 利史 / GMO PEPABO inc. 2023.06.05 データエンジニアリング合同勉強会 1 CDC
データパイプラインを 止めないために
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-tra nsfer-infrastructure?slide=14
日次データ転送によって生じるタイムラグ 6 DWH で集計・分析が可能となるまでの時間 = 抽出時間 + 転送時間 + ロード時間
特定時点のスナップショットデータを順番に転送している 一部のデータがロードできたとしても必要なデータが揃わないと 集計・分析を開始できない ↓ サイズが大きいテーブルのデータが必要なら、その完了を待つ
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 なので、将来的に仕様が変更となる可能性があります
9 CDCデータパイプライン 構成図 VPC Private subnet VPC Private subnet RDS
Replica RDS Primary S3 Fargate Batch ECS EC2 EFS Debezium Server Pub/Sub Merged view BigQuery Change events table BigQuery Snapshot table BigQuery Cloud Composer IN: OUT: 今回構築した範囲
AWS 10 - Debezium Server コンテナ*を ECS on EC2 で起動
- RDS for MySQL のレプリカが出力する binlog を読み込んで テーブル別につくった Cloud Pub/Sub Topic へ送信 - “変更をどこまで捕捉したか”を記録するファイルは EFS に保存 * https://github.com/debezium/container-images/tree/main/server
GCP 11 - Pub/Sub Subscription は BigQuery Subscriptions を指定して 専用テーブルに向けてストリーミングインサート
- CDC レコードと従来のスナップショットテーブルのレコードを マージしたビューを社内へ公開(詳細は次スライドで)
2 Merged view 12 つくりかた 🍳 1. CDC レコード群から、Primary key
ごとに最新のレコード状態を復元 2. 1 の Primary key を “含まない” レコードの集合をスナップショットテーブルから抽出 3. 1 と 2 を UNION ALL する Change events table BigQuery Snapshot table BigQuery Merged view BigQuery 1 PK別の最新状態 3
詳細はブログ記事をご覧ください 13 https://tech.pepabo.com/2023/04/20/cdc-for-realtime-analysis/
2. 現在の状況と成果 14
ハンドメイドマーケット minne で稼働中 15 転送対象 テーブル数 48 レコード件数 /day 650万
ハンドメイドマーケット minne で稼働中 16 転送対象 テーブル数 48 レコード件数 /day 650万
止まったら大変...
17 あやしいところに目を光らせる VPC Private subnet VPC Private subnet RDS Replica
RDS Primary S3 Fargate Batch ECS EC2 EFS Debezium Server Pub/Sub Merged view BigQuery Change events table BigQuery Snapshot table BigQuery Cloud Composer IN: OUT:
18 VPC Private subnet VPC Private subnet RDS Replica RDS
Primary S3 Fargate Batch ECS EC2 EFS Debezium Server Pub/Sub Merged view BigQuery Change events table BigQuery Snapshot table BigQuery Cloud Composer IN: OUT: RDS Connection 接続が切れたら ECS Service を自動的に再起動 CloudWatch Logs → EventBridge → Lambda あやしいところに目を光らせる
19 VPC Private subnet VPC Private subnet RDS Replica RDS
Primary S3 Fargate Batch ECS EC2 EFS Debezium Server Pub/Sub Merged view BigQuery Change events table BigQuery Snapshot table BigQuery Cloud Composer IN: OUT: ECS Service Mackerel エージェントをサイドカーコンテナとして起動 - コンテナ死活監視 - CPU 使用率 - Memory 使用率 あやしいところに目を光らせる
20 VPC Private subnet VPC Private subnet RDS Replica RDS
Primary S3 Fargate Batch ECS EC2 EFS Debezium Server Pub/Sub Merged view BigQuery Change events table BigQuery Snapshot table BigQuery Cloud Composer IN: OUT: Pub/Sub Subscription Oldest unacked message age(メッセージ滞留時間) 5分以上滞留している場合に Slack へ通知 あやしいところに目を光らせる
安定稼働による成果 21 - 日次集計処理の開始時刻を 12h 前倒し → 毎日13時 から 1時へ変更
- スナップショットテーブルの更新頻度を日次から週次へ変更 → 転送コスト削減 - 常に最新データが転送されている安心感 週次に変更した部分
22 Thank You! Thank You!