Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CDCデータパイプラインを止めないために / One Stream of the CDC

CDCデータパイプラインを止めないために / One Stream of the CDC

2023/06/05 データエンジニアリング合同勉強会
primeNumber Inc. / GMO Pepabo, Inc.

Toshifumi Tsutsumi

June 07, 2023
Tweet

More Decks by Toshifumi Tsutsumi

Other Decks in Programming

Transcript

  1. 堤 利史 / GMO PEPABO inc.
    2023.06.05 データエンジニアリング合同勉強会
    1
    CDC データパイプラインを
    止めないために

    View Slide

  2. 2
    自己紹介
    GMOペパボ株式会社
    技術部データ基盤チーム シニアエンジニア
    2020年 中途入社
    堤 利史 Tsutsumi Toshifumi
    ● データエンジニア
    ● Twitter : @tosh2230
    ● 最近そこそこ走っています(ジム派)
    ● スバル クロストレックがついに納車!!

    View Slide

  3. 3
    アジェンダ
    1. これまでのあらすじ
    2. 現在の状況と成果
    データ基盤 「Bigfoot」
    マスコットキャラクター
    Bigfootくん
    キャラクターグッズあります
    https://suzuri.jp/zaimy/designs/13278107

    View Slide

  4. 1. これまでのあらすじ
    4

    View Slide

  5. 以前のデータパイプライン
    5
    事業用 RDB のレコードを Google BigQuery へ日次で転送
    転送手段と規模
    - Embulk によるバッチ転送
    - テーブル数は数十〜数百
    (事業によって異なる)
    - テーブルサイズは 100 GiB
    レベルなものも存在
    https://speakerdeck.com/tosh2230/yeti-yet-another-extract-tra
    nsfer-infrastructure?slide=14

    View Slide

  6. 日次データ転送によって生じるタイムラグ
    6
    DWH で集計・分析が可能となるまでの時間
    = 抽出時間 + 転送時間 + ロード時間
    特定時点のスナップショットデータを順番に転送している
    一部のデータがロードできたとしても必要なデータが揃わないと
    集計・分析を開始できない

    サイズが大きいテーブルのデータが必要なら、その完了を待つ

    View Slide

  7. Change Data Capture(CDC) とは
    7
    データベースで生じたデータの変更を捕捉すること
    広義には、その変更内容を他のシステムやデータストアへ転送して活用する部分も含む
    活用例
    - データレプリケーション
    - キャッシュ更新
    - 全文検索エンジンのインデックス更新

    View Slide

  8. Debezium Server* を選択
    Debezium が提供するアプリケーション
    - Debezium: Kafka Connect として動作
    - Debezium Server: 変更イベントをメッセージングサービスへ送信(Kafkaless)
    8
    出典: https://debezium.io/documentation/reference/architecture.html
    * 2023年6月時点で incubating state なので、将来的に仕様が変更となる可能性があります

    View Slide

  9. 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:
    今回構築した範囲

    View Slide

  10. 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

    View Slide

  11. GCP
    11
    - Pub/Sub Subscription は BigQuery Subscriptions を指定して
    専用テーブルに向けてストリーミングインサート
    - CDC レコードと従来のスナップショットテーブルのレコードを
    マージしたビューを社内へ公開(詳細は次スライドで)

    View Slide

  12. 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

    View Slide

  13. 詳細はブログ記事をご覧ください
    13
    https://tech.pepabo.com/2023/04/20/cdc-for-realtime-analysis/

    View Slide

  14. 2. 現在の状況と成果
    14

    View Slide

  15. ハンドメイドマーケット minne で稼働中
    15
    転送対象
    テーブル数
    48
    レコード件数
    /day
    650万

    View Slide

  16. ハンドメイドマーケット minne で稼働中
    16
    転送対象
    テーブル数
    48
    レコード件数
    /day
    650万
    止まったら大変...

    View Slide

  17. 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:

    View Slide

  18. 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
    あやしいところに目を光らせる

    View Slide

  19. 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 使用率
    あやしいところに目を光らせる

    View Slide

  20. 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 へ通知
    あやしいところに目を光らせる

    View Slide

  21. 安定稼働による成果
    21
    - 日次集計処理の開始時刻を 12h 前倒し
    → 毎日13時 から 1時へ変更
    - スナップショットテーブルの更新頻度を日次から週次へ変更
    → 転送コスト削減
    - 常に最新データが転送されている安心感
    週次に変更した部分

    View Slide

  22. 22
    Thank You!
    Thank You!

    View Slide