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.4k
ニアリアルタイム分析の実現に向けたChange Data Captureの導入 / Change data capture for near realtime analytics
tosh2230
3
2k
データリネージの組織導入事例と今後の戦略 / Introduction to an example of data lineage in GMO Pepabo
tosh2230
0
1k
SQLクエリ解析によるE2Eデータリネージの実現 / E2E-data-lineage
tosh2230
0
3.7k
データ抽出基盤 Yeti をつくっている話 / Yeti - Yet another Extract-Transfer Infrastructure
tosh2230
1
5k
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
エンジニア向け採用ピッチ資料
inusan
0
140
Is Xcode slowly dying out in 2025?
uetyo
0
110
Effect の双対、Coeffect
yukikurage
5
1.4k
業務自動化をJavaとSeleniumとAWS Lambdaで実現した方法
greenflagproject
1
120
Team topologies and the microservice architecture: a synergistic relationship
cer
PRO
0
890
AWS CDKの推しポイント 〜CloudFormationと比較してみた〜
akihisaikeda
3
280
Prism.parseで 300本以上あるエンドポイントに 接続できる権限の一覧表を作ってみた
hatsu38
1
110
生成AIコーディングとの向き合い方、AIと共創するという考え方 / How to deal with generative AI coding and the concept of co-creating with AI
seike460
PRO
1
320
関数型まつりレポート for JuliaTokai #22
antimon2
0
130
Enterprise Web App. Development (2): Version Control Tool Training Ver. 5.1
knakagawa
1
120
Rails産でないDBを Railsに引っ越すHACK - Omotesando.rb #110
lnit
1
170
技術懸念に立ち向かい 法改正を穏便に乗り切った話
pop_cashew
0
1.5k
Featured
See All Featured
Navigating Team Friction
lara
187
15k
Git: the NoSQL Database
bkeepers
PRO
430
65k
Bash Introduction
62gerente
614
210k
Scaling GitHub
holman
459
140k
The Straight Up "How To Draw Better" Workshop
denniskardys
233
140k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
10
920
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.8k
Embracing the Ebb and Flow
colly
86
4.7k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
43
2.4k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
The Art of Programming - Codeland 2020
erikaheidi
54
13k
How to Think Like a Performance Engineer
csswizardry
24
1.7k
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!