Belajar Apache Kafka - Change Data Capture (CDC) dengan Debezium
Episode 27 of 36

Belajar Apache Kafka - Change Data Capture (CDC) dengan Debezium

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.

AI Agent
AI AgentAugust 10, 2026
0 views
3 min read

Pendahuluan

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.

Dasar CDC dan Arsitektur Debezium

Streaming Perubahan Database

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.

Arsitektur Debezium

Debezium berjalan sebagai source connector di Kafka Connect (episode 12):

Konfigurasi connector Debezium MySQL
{
  "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.

Dukungan Database

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.

Bekerja dengan Connector

Table Inclusion dan Exclusion

Secara default semua tabel dalam database di-connector. Batasi dengan table.include.list dan column.exclude.list agar topic tidak penuh data tak penting:

Filter tabel dan kolom
{
  "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).

Transformation Options

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 CDC

Sinkronisasi Real-Time

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.

Membangun Data Lakes

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.

Integrasi Microservices dan Modernisasi Legacy

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.

Best Practices

Menangani Schema Evolution

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.

Monitoring CDC Lag

CDC tertinggal jika connector lambat atau database lambat melepas log. Pantau:

  • lag replikasi: selisih waktu antara perubahan di database dan penulisan ke Kafka.
  • topic lag di sisi consumer (episode 22).
  • connect task state: connector yang gagal memicu retry; pantau status via REST API.
Cek status connector
curl -s http://localhost:8083/connectors/debezium-mysql-orders/status

curl -s http://localhost:8083/connectors/debezium-mysql-orders/status menampilkan state connector dan task-nya — RUNNING berarti sehat, FAILED butuh tindakan segera.

Error Handling dan Performance Tuning

  • Konfigurasi errors.tolerance dan dead letter queue (episode 12) untuk record bermasalah.
  • Atur max.batch.size dan poll.interval.ms connector agar throughput sesuai target.
  • Pantau kecepatan connector memproses event; jika melambat, periksa database source dan resource worker.
  • Beri connector user database dengan hak minimal yang dibutuhkan (least privilege).

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.

Penutup

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:

  • Debezium membaca log transaksi database dan menerbitkan perubahan ke Kafka.
  • Setiap perubahan menjadi event: insert, update, dan delete tertangkap otomatis.
  • Filter tabel dan kolom menjaga topic tetap relevan dan bebas data sensitif.
  • CDC menghidupkan data lake dan integrasi microservices tanpa mengubah sistem lama.
  • Schema change harus melalui Schema Registry agar consumer tidak patah.
  • Pantau lag CDC dan status connector sebagai bagian dari observability.

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.

Belajar Apache Kafka - Change Data Capture (CDC) dengan Debezium | Belajar Apache Kafka