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.5k
ニアリアルタイム分析の実現に向けたChange Data Captureの導入 / Change data capture for near realtime analytics
tosh2230
3
1.7k
データリネージの組織導入事例と今後の戦略 / Introduction to an example of data lineage in GMO Pepabo
tosh2230
0
900
SQLクエリ解析によるE2Eデータリネージの実現 / E2E-data-lineage
tosh2230
0
3.4k
データ抽出基盤 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
見えないメモリを観測する: PHP 8.4 `pg_result_memory_size()` とSQL結果のメモリ管理
kentaroutakeda
0
330
DevFest Tokyo 2025 - Flutter のアプリアーキテクチャ現在地点
wasabeef
5
900
testcontainers のススメ
sgash708
1
120
tidymodelsによるtidyな生存時間解析 / Japan.R2024
dropout009
1
770
KubeCon + CloudNativeCon NA 2024 Overviewat Kubernetes Meetup Tokyo #68 / amsy810_k8sjp68
masayaaoyama
0
250
ソフトウェアの振る舞いに着目し 複雑な要件の開発に立ち向かう
rickyban
0
890
今年のアップデートで振り返るCDKセキュリティのシフトレフト/2024-cdk-security-shift-left
tomoki10
0
200
[JAWS-UG横浜 #76] イケてるアップデートを宇宙いち早く紹介するよ!
maroon1st
0
460
42 best practices for Symfony, a decade later
tucksaun
1
180
数十万行のプロジェクトを Scala 2から3に完全移行した
xuwei_k
0
270
Итераторы в Go 1.23: зачем они нужны, как использовать, и насколько они быстрые?
lamodatech
0
750
フロントエンドのディレクトリ構成どうしてる? Feature-Sliced Design 導入体験談
osakatechlab
8
4.1k
Featured
See All Featured
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
Designing Experiences People Love
moore
138
23k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
26
1.9k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
232
17k
Building Flexible Design Systems
yeseniaperezcruz
327
38k
Building Adaptive Systems
keathley
38
2.3k
[RailsConf 2023] Rails as a piece of cake
palkan
53
5k
Raft: Consensus for Rubyists
vanstee
137
6.7k
StorybookのUI Testing Handbookを読んだ
zakiyama
27
5.3k
Designing for humans not robots
tammielis
250
25k
Art, The Web, and Tiny UX
lynnandtonic
298
20k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.1k
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!