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.3k
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.7k
ニアリアルタイム分析の実現に向けたChange Data Captureの導入 / Change data capture for near realtime analytics
tosh2230
3
1.8k
データリネージの組織導入事例と今後の戦略 / Introduction to an example of data lineage in GMO Pepabo
tosh2230
0
920
SQLクエリ解析によるE2Eデータリネージの実現 / E2E-data-lineage
tosh2230
0
3.5k
データ抽出基盤 Yeti をつくっている話 / Yeti - Yet another Extract-Transfer Infrastructure
tosh2230
1
4.6k
Loggingモジュールではじめるログ出力入門 / Introduction to Python Logging
tosh2230
32
13k
データ基盤チームの設立と直近の取り組み / the-establishment-of-pepabo-data-platform-team
tosh2230
5
4.3k
Other Decks in Programming
See All in Programming
AWS re:Invent 2024個人的まとめ
satoshi256kbyte
0
100
AppRouterを用いた大規模サービス開発におけるディレクトリ構成の変遷と問題点
eiganken
1
440
「とりあえず動く」コードはよい、「読みやすい」コードはもっとよい / Code that 'just works' is good, but code that is 'readable' is even better.
mkmk884
6
1.4k
『改訂新版 良いコード/悪いコードで学ぶ設計入門』活用方法−爆速でスキルアップする!効果的な学習アプローチ / effective-learning-of-good-code
minodriven
28
4.1k
Итераторы в Go 1.23: зачем они нужны, как использовать, и насколько они быстрые?
lamodatech
0
1.4k
Androidアプリの One Experience リリース
nein37
0
1.1k
ISUCON14感想戦で85万点まで頑張ってみた
ponyo877
1
590
functionalなアプローチで動的要素を排除する
ryopeko
1
190
20年もののレガシープロダクトに 0からPHPStanを入れるまで / phpcon2024
hirobe1999
0
1k
Оптимизируем производительность блока Казначейство
lamodatech
0
950
見えないメモリを観測する: PHP 8.4 `pg_result_memory_size()` とSQL結果のメモリ管理
kentaroutakeda
0
930
混沌とした例外処理とエラー監視に秩序をもたらす
morihirok
13
2.2k
Featured
See All Featured
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
330
21k
A Tale of Four Properties
chriscoyier
157
23k
4 Signs Your Business is Dying
shpigford
182
22k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
6
500
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
49
2.2k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
The Pragmatic Product Professional
lauravandoore
32
6.4k
How STYLIGHT went responsive
nonsquared
96
5.3k
Optimizing for Happiness
mojombo
376
70k
Rails Girls Zürich Keynote
gr2m
94
13k
KATA
mclloyd
29
14k
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!