Episode ini membahas Change Data Capture dengan Debezium: streaming perubahan database, arsitektur Debezium dan connector, dukungan MySQL, PostgreSQL, dan MongoDB, snapshot mode, filter tabel, penanganan schema change, serta best practices untuk monitoring lag dan error handling.

Banyak sistem lama menyimpan kebenaran di database relasional, sementara aplikasi modern butuh data itu bergerak secara real-time. Change Data Capture (CDC) adalah jembatannya: setiap perubahan di database — insert, update, delete — diterbitkan sebagai event ke Kafka.
Debezium adalah framework CDC open-source yang dibangun di atas Kafka Connect. Ia membaca log transaksi database dan menyalurkan perubahan ke topic tanpa aplikasi harus menulis dua kali. Episode 27 ini akan membahas arsitektur Debezium, connector untuk berbagai database, snapshot mode, filter dan transformasi, penanganan schema change, serta praktik pemantauan.
CDC menghilangkan kebutuhan aplikasi menulis event secara manual. Alih-alih, Debezium mengamati sumber perubahan yang sebenarnya — transaction log (binlog di MySQL, WAL di PostgreSQL, oplog di MongoDB) — dan menerbitkan setiap perubahan sebagai record Kafka. Data yang terlewat dari aplikasi pun tetap tertangkap.
Debezium berjalan sebagai source connector di Kafka Connect (episode 12):
{
"name": "debezium-mysql-orders",
"config": {
"connector.class": "io.debezium.connector.mysql.MySqlConnector",
"database.hostname": "db.internal",
"database.user": "debezium",
"database.dbname": "shop",
"topic.prefix": "db",
"snapshot.mode": "initial",
"include.schema.changes": "true"
}
}connector.class menentukan driver database, dan topic.prefix menjadi awalan nama topic — connector di atas menulis ke topic db.shop.orders untuk tabel orders. snapshot.mode=initial berarti connector melakukan snapshot awal lalu melanjutkan dengan perubahan real-time.
Debezium mendukung MySQL, PostgreSQL, MongoDB, Oracle, SQL Server, dan lainnya. Setiap connector membutuhkan user database dengan hak membaca log transaksi. Logging position disimpan di Kafka (topic offset), sehingga connector bisa melanjutkan dari posisi terakhir setelah restart.
Secara default semua tabel dalam database di-connector. Batasi dengan table.include.list dan column.exclude.list agar topic tidak penuh data tak penting:
{
"name": "debezium-mysql-orders",
"config": {
"connector.class": "io.debezium.connector.mysql.MySqlConnector",
"database.dbname": "shop",
"topic.prefix": "db",
"table.include.list": "shop.orders,shop.order_items",
"column.exclude.list": "shop.orders.credit_card"
}
}table.include.list membatasi hanya tabel yang diinginkan, dan column.exclude.list mencegah kolom sensitif seperti credit_card bocor ke Kafka — penting untuk kepatuhan data (episode 33).
Debezium bisa mengkombinasikan transfroms: menambah metadata, menghapus field, atau menyederhanakan struktur record. Untuk banyak kasus, record Debezium perlu dibersihkan sebelum dipakai downstream — misalnya membuang bagian source yang berat dan menjaga hanya after sebagai payload.
Pola paling umum: database produksi mereplikasi perubahan ke data warehouse, search index, atau cache secara real-time. CDC membuat data sekunder selalu mendekati data utama tanpa batch ETL. Data yang sama juga bisa mengisi model analitik dan sistem machine learning.
Dengan CDC, seluruh perubahan tabel dialirkan ke object storage (via sink connector) membentuk data lake berformat parquet. Karena setiap perubahan tersimpan sebagai event, kalian punya riwayat penuh — bukan hanya snapshot terbaru.
Microservices bisa berbagi data database lama tanpa menyentuh kode legacy: Debezium membaca perubahan dari database monolit dan menerbitkan event untuk service baru. Ini juga menjadi jalur utama pola outbox (episode 26) dan modernisasi bertahap.
Skema database berubah seiring waktu — kolom ditambah, tipe diubah. Debezium menangani ini dengan mengirim schema change events (bila include.schema.changes=true). Gunakan Schema Registry (episode 7) dengan kompatibilitas backward/full agar consumer lama tidak patah saat skema berubah. Selalu uji perubahan skema di staging sebelum produksi.
CDC tertinggal jika connector lambat atau database lambat melepas log. Pantau:
curl -s http://localhost:8083/connectors/debezium-mysql-orders/statuscurl -s http://localhost:8083/connectors/debezium-mysql-orders/status menampilkan state connector dan task-nya — RUNNING berarti sehat, FAILED butuh tindakan segera.
errors.tolerance dan dead letter queue (episode 12) untuk record bermasalah.max.batch.size dan poll.interval.ms connector agar throughput sesuai target.Info
JDBC polling biasa adalah alternatif sederhana untuk CDC, tetapi ia menulis query berkala dan tidak mendeteksi delete atau perubahan cepat dengan baik. CDC membaca log transaksi sehingga lebih akurat dan tanpa beban query — gunakan CDC untuk kebutuhan real-time, JDBC untuk integrasi batch yang sederhana.
Di episode 27 ini kalian sudah memahami CDC dengan Debezium: alur streaming perubahan database, arsitektur connector di Kafka Connect, snapshot mode, filter tabel dan kolom, pola sinkronisasi dan data lake, serta best practices schema evolution, monitoring, dan error handling.
Inti yang harus dibawa pulang:
Di episode 28 selanjutnya kita akan membawa Kafka ke Kubernetes: deployment dengan Strimzi. Kalian akan belajar operator pattern, CRDs seperti Kafka dan KafkaConnect, StatefulSets, TLS management otomatis, serta pertimbangan produksi di K8s.