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.2k
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
4.4k
ニアリアルタイム分析の実現に向けたChange Data Captureの導入 / Change data capture for near realtime analytics
tosh2230
3
1.6k
データリネージの組織導入事例と今後の戦略 / Introduction to an example of data lineage in GMO Pepabo
tosh2230
0
880
SQLクエリ解析によるE2Eデータリネージの実現 / E2E-data-lineage
tosh2230
0
3.4k
データ抽出基盤 Yeti をつくっている話 / Yeti - Yet another Extract-Transfer Infrastructure
tosh2230
1
4.5k
Loggingモジュールではじめるログ出力入門 / Introduction to Python Logging
tosh2230
32
13k
データ基盤チームの設立と直近の取り組み / the-establishment-of-pepabo-data-platform-team
tosh2230
5
4.2k
Other Decks in Programming
See All in Programming
WebフロントエンドにおけるGraphQL(あるいはバックエンドのAPI)との向き合い方 / #241106_plk_frontend
izumin5210
4
1.4k
Click-free releases & the making of a CLI app
oheyadam
2
110
as(型アサーション)を書く前にできること
marokanatani
10
2.6k
Amazon Qを使ってIaCを触ろう!
maruto
0
400
CSC509 Lecture 11
javiergs
PRO
0
180
Quine, Polyglot, 良いコード
qnighy
4
640
Streams APIとTCPフロー制御 / Web Streams API and TCP flow control
tasshi
2
350
Hotwire or React? ~アフタートーク・本編に含めなかった話~ / Hotwire or React? after talk
harunatsujita
1
120
Webの技術スタックで マルチプラットフォームアプリ開発を可能にするElixirDesktopの紹介
thehaigo
2
1k
Amazon Bedrock Agentsを用いてアプリ開発してみた!
har1101
0
330
最新TCAキャッチアップ
0si43
0
140
ヤプリ新卒SREの オンボーディング
masaki12
0
130
Featured
See All Featured
Put a Button on it: Removing Barriers to Going Fast.
kastner
59
3.5k
10 Git Anti Patterns You Should be Aware of
lemiorhan
654
59k
Ruby is Unlike a Banana
tanoku
97
11k
Reflections from 52 weeks, 52 projects
jeffersonlam
346
20k
Building Adaptive Systems
keathley
38
2.3k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
26
2.1k
Automating Front-end Workflow
addyosmani
1366
200k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Unsuck your backbone
ammeep
668
57k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
126
18k
A designer walks into a library…
pauljervisheath
203
24k
The Language of Interfaces
destraynor
154
24k
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!