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
Debeziumで変更データキャプチャを学ぼう #jjug_ccc
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
yy_yank
November 21, 2021
Programming
790
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Debeziumで変更データキャプチャを学ぼう #jjug_ccc
JJUG CCC 2021 Fallの 「15:00 ~ 15:50 Debeziumで変更データキャプチャを学ぼう」の資料です
yy_yank
November 21, 2021
More Decks by yy_yank
See All by yy_yank
結局、リファクタリングって何なのか 〜掃除から紐解くリファクタリング〜(refactoring vs room cleaning)
yyyank
0
300
R2DBCでAPIの高速化をしようとしてやめた話
yyyank
0
1.6k
サーバーサイドKotlinという選択肢とユーザベース
yyyank
0
350
Javaプログラマのための頑張らないGo入門
yyyank
0
57
Other Decks in Programming
See All in Programming
気圧・高度・GPSを記録&可視化するアプリ「Koudo」を作った話
hjmkth
1
340
スマートグラスで並列バイブコーディング
hyshu
0
280
Observability in Practice:Grafana 與 Edge Device SRE 的那些事
blueswen
0
190
任せる範囲はこう広がった / How the Scope of AI Delegation Has Expanded
nrslib
1
230
ADKを使って簡単にAIエージェントを作ってみよう
k1mu21
0
290
技術的負債解消で開発者の未来を開く- AIの力でコード刷新
kmd2kmd
0
140
技術記事、 専門家としてのプログラマ、 言語化
mizchi
14
7.2k
Vue × Nuxt × Oxc どこまで使える?実運用の現在地
andpad
0
350
エンジニアと一緒にテストコードの設計と実装を改善した話
mototakatsu
0
250
Go1.27で導入されるジェネリクスメソッドでできること
mackee
0
240
分散システム、なんですぐ死んでしまうん?耐障害性を高めたいあなたのためのレジリエンスパターン入門
mshibuya
3
1k
IBM Bobを活用したレガシーアプリの最新化
oniak3ibm
PRO
1
240
Featured
See All Featured
The Curse of the Amulet
leimatthew05
2
13k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.5k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
220
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
180
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
550
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.3k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
600
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.5k
How to train your dragon (web standard)
notwaldorf
97
6.7k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.8k
Un-Boring Meetings
codingconduct
0
330
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.3k
Transcript
Debeziumで変更データキャプチャを学ぼ う JJUG CCC 2021 Fall #jjug_ccc_c #jjug_ccc @yy_yank
#jjug_ccc_c #jjug_ccc でつぶやいてください ハッシュタグ TODO ハッシュタグ
自己紹介 やんく(@yy_yank) こいつです ・(株)ユーザベースのプログラマ ・JJUG CCC登壇5回目? ・iconはsakuraエディタなのに ・vim使う ・Java,Kotlin,Goが好き
• このセッションは個人の感想です。所属企業のう んぬんかんぬんではありません。 NOTE
• 変更データキャプチャについて知りたい人 • Debeziumに興味がある人 • データ移行や同期などの良い方法がないか探している 人 • 「モノリスからマイクロサービスへ」を読んだ人 対象聴講者
• Debezium完全に理解した、自分でも使えそう!と思っ てもらいたい • 変更データキャプチャを使えば移行元のコードベース に手を加えずに変更を検知できる 今日のセッションで伝えたいこと
1. 変更データキャプチャについて 2. Debeziumとは 3. ケーススタディ まとめ アジェンダ アジェンダ
1. 変更データキャプチャについて 2. Debeziumとは 3. ケーススタディ まとめ アジェンダ アジェンダ
• CDC(Change Data Caputure)変更データキャプチャ • Consumer Driven Contractではない • Debeziumの場合、データベースのトランザクションログ
を読み込むことで変更を検知し、イベントを発火する(大 体の変更データキャプチャはその形式な気がします) 変更データキャプチャとは 1. 変更データキャプチャについて
• OSSだと、割とDebezium一択なんじゃないかと思う 参考:CDC(チャンジデータキャプチャ)ツールにどんなも のがあるかのメモ https://yyyank.blogspot.com/2021/08/research-change-data-caputure-tool.html 変更データキャプチャのツール 1. 変更データキャプチャについて
• 何らかの理由で変更のできないコードベース • 変更のしにくいコードベース • どこでDBデータが更新、削除、登録されているか分か りにくいコードベース →コードベースに手を加えることなく変更を検知できる! なぜ、変更データキャプチャか? 1.
変更データキャプチャについて
• データ移行、データ同期などを考えたい場合 例) • マイクロサービス化 • DBリプレース • データの差分更新(キャッシュ、DB、Elasticsearch etc...)
どういう時に変更データキャプチャを使う? 1. 変更データキャプチャについて
• チェンジイベント(データ)に基づいているか、ドメインイベントに基づ いているかの違いがある ◦ データに基づいているのであれば変更データキャプチャ ◦ ユーザーがどういった意図で操作したかといったドメイン知識が 必要であればイベントソーシング https://rheb.hatenablog.com/entry/2020/02/10/event-sourcing-vs-cdc/ https://debezium.io/blog/2020/02/10/event-sourcing-vs-cdc/
変更データキャプチャ vs イベントソーシング 1. 変更データキャプチャについて
• 結局、どれぐらいデータが同期されていない時間を許 容するかという要件が大きい ◦ 1秒ごとに最新データが必要なのか ◦ 1日ごとにデータが最新化されれば良いのか 変更データキャプチャ vs バッチ
1. 変更データキャプチャについて
• データ量の問題 ◦ データは増え続けるか ◦ バッチの実行時間は増え続けるか ◦ バッチのメンテは大変ではないか 変更データキャプチャ vs
バッチ 1. 変更データキャプチャについて
1. 変更データキャプチャについて 2. Debeziumとは 3. ケーススタディ まとめ アジェンダ アジェンダ
https://debezium.io/ • RedHatがサポートするオープンソースプロジェクト • データベースの行レベルの変更をキャプチャする分散サービスのセット • 日本語のREADMEがある https://github.com/debezium/debezium/blob/master/README_JA.md Debeziumの概要 2.
Debeziumとは
https://debezium.io/documentation/reference/1.7/architecture.html より引用 Debeziumの仕組み(Source/Sinkコネクタ使う場合) 2. Debeziumとは
https://debezium.io/documentation/reference/1.7/architecture.html より引用 Debeziumの仕組み(Debezium Serverの場合) 2. Debeziumとは
要するにKafka?
はい
• DebeziumはKafka Connectプラグイン(といっても過言ではない気がする) • Kafka ConnectのソースコネクタがDBのトランザクションログを読む • Kafka Connectに登録されたDebeziumのソースコネクタがKafkaにメッセージ をpublishする
• あとはKafkaのイベントを好きにsubscribeすれば良い (Kafka Connectのシンクコネクタでも良いし、Kafkaのコンシューマーでよしなに subscribeしても良い) Debeziumの仕組み 2. Debeziumとは
• Kafkaに依存するのではなくEmbedded Engineを使うことで変更を 検知して、お好みのメッセージブローカーに送信することも出来る • 以下はAmazon Kinesisに変更イベントをpublishしている例 https://github.com/debezium/debezium-examples/blob/master /kinesis/src/main/java/io/debezium/examples/kinesis/ChangeD ataSender.java
Embedded Engineもある 2. Debeziumとは
https://debezium.io/documentation/reference/connectors/inde x.html MySQL、PostgreSQL、SQL Server、Oracle、DB2、 Mongo DB、Cassandra (Incubating)、Vitess (Incubating) 対応しているデータベース 2.
Debeziumとは
1. 変更データキャプチャについて 2. Debeziumとは 3. ケーススタディ まとめ アジェンダ アジェンダ
https://github.com/yyYank/2021-fall-debezium-s ample こちらのリポジトリにサンプルコードがあります 3. ケーススタディ
• 音楽サイトのモノリスがあった ◦ 音楽配信、歌詞表示、ランキング、ECサイト、音楽 系の独自記事などのコンテンツ ◦ アルバム関連のドメイン境界を分離してマイクロ サービス化すると、今後の機能リリース的に嬉し いことがわかったのでマイクロサービス化 ストーリー
3. ケーススタディ
• 既存のモノリス側のエンドポイントから徐々にマイクロ サービスへ移行することになった • これまでは単純なアルバムとトラック情報、そして曲 ごとの五段階の評価(★3つなど)しかなかった ストーリー 3. ケーススタディ
• 今後マイクロサービスとしてアルバム情報とアルバム を気に入ってる人の情報を集計して別のアルバムや 曲をレコメンドにしたり、レビューをさらに詳細にコメン トを書けるようにしたり • アルバム関連のデータ移行をしたいが、音楽サイトの 本番を止めるわけにはいかない ストーリー 3.
ケーススタディ
• そこで、変更データキャプチャを使って徐々にデータ を同期する!!!! ストーリー 3. ケーススタディ
という妄想です
• 既存システム(モノリス) • 新しいマイクロサービス(album-api) 登場人物 3. ケーススタディ
• 変更データキャプチャを使ってモノリスDBからアルバ ムAPIにデータを同期する (変更をイベントを検知し、アルバムAPIのエンドポイント を叩いて登録、更新、削除の処理を行う) これだけです!単純な例でスミマセン サンプルリポジトリでやっていること 3. ケーススタディ
• Spring Boot • Spring Kafka • Spring JDBC •
Kotlin サンプルリポジトリの技術要素 3. ケーススタディ
Dockerで動かしているもの • Kafka • Kafka Connect • Zookeeper • MySQL(モノリスDB)
• MySQL(アルバムAPI用DB) サンプルリポジトリの技術要素 3. ケーススタディ
実際のサンプルを見てみましょう
DEMO
• Kafkaのトピックはデータベースのテーブル毎に作成される • Kafka ConnectにDebeziumコネクタ登録するときの設定が間違っ ているとデータベースのテーブル毎にKafkaのトピックは作成されな い • MySQLがbinlog =
rowで行レベルでのbinlogを出力していないと、 変更が検知できなくてDebeziumコネクタがKafkaのイベントを publish出来ない DEMOで伝えたハマりどころ 3. ケーススタディ
なんとなく雰囲気つかめました か?
1. 変更データキャプチャについて 2. Debeziumとは 3. ケーススタディ まとめ アジェンダ アジェンダ
• 変更データキャプチャを使うことで、データの同期がや りやすくなる • バッチとサヨナラも可能かもしれない • Debeziumを使う ≒ Kafkaと付き合う •
Kafkaが嫌ならEmbedded Engineという手もある まとめ
• 非同期と付き合う ≒ トレーサビリティが必要になる • 異常系の考慮が必要(書き込み失敗、リトライetc...) • データ移行は段階的に • 同時実行やフィーチャーフラグなどで慎重に
まとめ
自分の知識不足による誤りなどあれば教 えていただけると幸いです。 適宜、資料修正します。 連絡先 twitter @yy_yank