# Change Data Capture

**URL:** https://discuss.dataengineercafe.io/t/change-data-capture/578
**Category:** 97 Things Every Data Engineer Should Know
**Tags:** data-pipeline, database, cdc
**Created:** [May 2, 2023, 8:02am UTC](https://discuss.dataengineercafe.io/t/change-data-capture/578 "2023-05-02T08:02:05Z")
**Posts on this page:** 5
**Page:** 1

<div class="post-metadata">

### Author: ![zkan](https://yyz1.discourse-cdn.com/flex035/user_avatar/discuss.dataengineercafe.io/zkan/32/2_2.png) [@zkan](https://discuss.dataengineercafe.io/u/zkan)
#### Post date: [May 2, 2023, 8:02am UTC](https://discuss.dataengineercafe.io/t/change-data-capture/578/1 "2023-05-02T08:02:05Z")

</div>

โดย [Raghotham Murthy](https://www.linkedin.com/in/raghotham/)

ในการที่เราอยากจะเอาข้อมูลที่อยู่ใน production database มาวิเคราะห์ต่อใน data warehouse หรือ data lake และเราก็ไม่อยากจะไปเพิ่มโหลดอะไรให้กับตัว database นั้น ๆ ทีนี้เราจะมีวิธีการอย่างไรที่น่าเชื่อถือที่เราจะสามารถ replicate ข้อมูลจาก production database มาไว้ที่ data warehouse ได้

ปัญหานี้เป็นปัญหาที่แก้ยากปัญหาหนึ่งในระดับ scale ที่ใหญ่ ๆ คือเราไม่สามารถที่จะอยู่ดี ๆ ก็ copy ข้อมูลทั้งหมดบน production database ไปที่ data warehouse ได้ ซึ่งจริง ๆ เราอาจจะต้องการแค่เก็บเฉพาะการเปลี่ยนแปลงของข้อมูลมาเท่านั้น

ใน modern production database ส่วนใหญ่จะมี write-ahead log (WAL) หรือ change log ในการประมวลผลข้อมูล transaction ปกติอยู่แล้ว ซึ่ง log พวกนี้จะเก็บการเปลี่ยนแปลงในแต่ละข้อมูลในตารางใน database ที่เราจะสามารถนำเอามาทำ replicas ของ production database ได้ ซึ่งเทคนิคนี้เรียกว่า change data capture (CDC) นั่นเอง โดยเทคนิคที่ว่านี้จะให้ผลลัพธ์ที่ดีกว่า batch exports

แต่ว่าเราจะต้องมอง CDC เป็นแบบ end-to-end data pipeline นะ เพื่อที่จะ replicate ข้อมูลได้อย่างสมบูรณ์แบบ และการใช้เทคนิค CDC เราต้องพิจารณาเรื่องพวกนี้ด้วย

### Scale

เราจะทำอย่างไรในแง่การจัดการข้อมูลที่มี volume เยอะ ๆ เช่น WAL นี่อาจจะทำให้ out of disk space ได้ด้วย ถ้าเราไม่ดึงข้อมูลไปสักที

### Replication log

เราจะต้องดูด้วยว่าช่วงเวลาที่เรา replicate ข้อมูลไป ใช้เวลาเท่าไหร่กว่าที่เราจะมีข้อมูลให้ใช้งานได้จริงบน data warehouse

### Schema changes

ข้อมูลใน database มีการเปลี่ยนแปลง schema ซึ่งเราก็ต้องดูด้วยว่าเราจะนำการเปลี่ยแปลงเหล่านั้นไปยัง data warehouse ของเราได้อย่างไร

### Masking

เรื่องนี้ต้องดูพวก sensitive data ด้วย ว่าข้อมูลไหนเราควรทำ masking บ้าง

### Historical syncs

ก่อนที่เราจะทำ CDC เราจะต้องทำ initial historical sync อย่างน้อยสัก 1 รอบก่อนด้วย หรือเราอาจจะต้องเตรียมพวก partial historical sync ด้วยเช่นเดียวกัน ในกรณีที่เกิดปัญหาในส่วน WAL

สุดท้าย.. เค้าบอกว่าอย่าพยายามสร้าง CDC connector เอง ให้ใช้เครื่องมือที่มีอยู่แล้วก่อน

---

<div class="post-metadata">

### Author: ![zkan](https://yyz1.discourse-cdn.com/flex035/user_avatar/discuss.dataengineercafe.io/zkan/32/2_2.png) [@zkan](https://discuss.dataengineercafe.io/u/zkan)
#### Post date: [May 2, 2023, 8:05am UTC](https://discuss.dataengineercafe.io/t/change-data-capture/578/2 "2023-05-02T08:05:37Z")

</div>

ตรง CDC นี่ในหนังสือ Data Mesh เค้าก็ไม่ค่อยแนะนำเท่าไหร่นะ ตามที่ว่ามาด้านล่างนี้เลย 👇

> [@วันนี้อ่านหนังสือ Data Mesh จบแล้วววว~ open\_book](https://discuss.dataengineercafe.io/t/data-mesh/355/1):
>
> เรื่อง change data capture (CDC) เค้าบอกว่าเป็น least desirable way เพราะว่ามัน expose internal implementation ของ database transaction มากเกินไป และมันไม่ได้เกี่ยวกับ business domain

---

<div class="post-metadata">

### Author: ![engineerball](https://yyz1.discourse-cdn.com/flex035/user_avatar/discuss.dataengineercafe.io/engineerball/32/469_2.png) [@engineerball](https://discuss.dataengineercafe.io/u/engineerball)
#### Post date: [June 7, 2023, 2:10am UTC](https://discuss.dataengineercafe.io/t/change-data-capture/578/3 "2023-06-07T02:10:42Z")

</div>

implement CDC ขึ้นมาเหมือนกัน มีเรื่องให้ aware เยอะมาก

---

<div class="post-metadata">

### Author: ![kahnwong](https://yyz1.discourse-cdn.com/flex035/user_avatar/discuss.dataengineercafe.io/kahnwong/32/295_2.png) [@kahnwong](https://discuss.dataengineercafe.io/u/kahnwong)
#### Post date: [June 10, 2023, 7:09am UTC](https://discuss.dataengineercafe.io/t/change-data-capture/578/4 "2023-06-10T07:09:44Z")

</div>

CDC ก็มีข้อดีนะ แต่มันออกแนวอุดหน้างานนิดๆ แล้วมัน test/debug ยาก เพราะ dependencies เยอะ  
ส่วนใหญ่ทำ batch จะคุมง่ายกว่า test ง่ายกว่าด้วย

แต่บางงานที่มันต้อง CDC จริงๆ ก็มี แต่น้อยกว่าที่คนส่วนใหญ่คิด

---

<div class="post-metadata">

### Author: ![zkan](https://yyz1.discourse-cdn.com/flex035/user_avatar/discuss.dataengineercafe.io/zkan/32/2_2.png) [@zkan](https://discuss.dataengineercafe.io/u/zkan)
#### Post date: [January 3, 2025, 3:06am UTC](https://discuss.dataengineercafe.io/t/change-data-capture/578/5 "2025-01-03T03:06:33Z")

</div>

เพิ่งเห็นบทความนี้ [ลองสร้าง Change Data Capture pipeline ด้วย Debezium และ Apache Kafka | by Nuipin Decimo | Medium](https://decimo.medium.com/%E0%B8%A5%E0%B8%AD%E0%B8%87%E0%B8%AA%E0%B8%A3%E0%B9%89%E0%B8%B2%E0%B8%87-change-data-capture-pipeline-%E0%B8%94%E0%B9%89%E0%B8%A7%E0%B8%A2-debezium-%E0%B9%81%E0%B8%A5%E0%B8%B0-apache-kafka-8bf17201a9d6)

เผื่อใครสนใจอยากลองทำตามครับ
