Debezium

Streaming Platform

D. Husni Fahri Rizal
The Legend
4 min readMay 4, 2020

--

https://debezium.io/

Debezium adalah sebuah platform terdistribusi yang bersifat open source untuk melakukan prosess CDC( Change Data Capture). Debezium dikembangkan oleh red hat sebagai plugin untuk kafka yang berjalan di atas kafka connect.

Dengan menggunakan debezium memungkinkan aplikasi kita dapat melakukan respons terhadap seemua perubahan yang terjadi pada database. Debezium akan memonitoring terus database kita dan menstriming setiap perubahan datanya. Bahkan perubahan data yang terjadi bukan dari aplikasi misalkan dari console atau dilakukan oleh proses injeksi data secara langsung di database, debezium pun dapat melakukan stream data. CDC akan mengirimkan data secara ascyronous dengan urutan data sesuai dengan urutan perubahan datanya.

Debezium merupakan datasorce connector dan jika kita gabungkan dengan kafka sink connector maka kita dapat melakukan streaming data dan minyimpannya pada media penyimpanan lainnnya.

Seperti dijelaskan pada artikel Kafka Connect dan Debezium, debezium dapat kita gunakan untuk prosess migrasi dari monolith sistem ke microservice sistem. Kita dapat melakukan CDC dari sistem lama tanpa harus melakukan penambahan code dan mengotak-atik aplikasi yang lama.

Contoh sistem lama atau service lama mengirimkan data ke debezium dan service-service baru akan menerima semua perubahan datanya (https://debezium.io/)

Ada yang perlu diperhatikan dari proses CDC dengan debezium ini. Debezium akan melakukan capture segala perubahan data setelah proses perubahan (penyimpanan atau delete) data berhasil dilakukan pada database. Dengan demikian, prosesnya tidak akan mengganggu proses yang sedang berjalan dan tidak akan juga mengurangi performance dari aplikasi.

Debezium sendiri adalah sebual libary tepatnya plugin yang dibuat dengan menggunakan java dan terakhir versi ketika penulis mebuat artikel ini adalah versi 1.2. Untuk lebih detil bisa dilihat dari roadmap mereka berikut.

Salah satu kelebihan dari debezium walaupun dari awal dibuat sebagai pelengkap dari kafka connector, akan tetapi sudah ditambahkan beberepa kemampuannya agar dapat berintegarsi bukan hanya dengan kafka akan tetapi dengan message broker lainnya misalkan Kinesis.

Berikut adalah jenis-jenis penyimpanan yang sudah di support oleh debezium.

Berikut adalah beberapa contoh penggunaan yang umum dari debezium.

  1. Query service atau search engine dengan mengimplementasikan CQRS.
  2. Aggregator dan event sourcing.
  3. Audit log menggantikan hibenernate envers atau tenknik audit log lainnya.

Perlu diperhatikan untuk setiap database, ada beberapa yang perlu kita lakukan dalam configurasi. Misalkan, pada mysql kita perlu mengaktifkan binlog. Debezium akan membaca dari binlog ini sehingga mengetahui segala perubahan data dan urutannnya.

Streaming Data Ke Elasticserach (Query Service)

Berkut adalah diagram bagaimana kita dapat melakukan streaming data ke elasticsearch dari aplikasi lama kita tanpa menambahkan code apapun di aplikasi lama kita.

https://debezium.io/

Dari diagram di atas dapat dijelaskan sebagai berikut. Dengan menggunakan debezium semua perubahan pada database akan di capture dan dikirimkan ke kafka. Kemudian oleh kafka sink connector secara parapel akan ditulis ke database prostgresql dan elasticsearach secara bersamaan.

Perlu diperhatikan bawa debezium ini akan mengirimkan format data yang lebih kompleks dari pada jenis konektor standar. Hal ini karena untuk dapat mengetahui segala perubahan dan urutan datanya. Akan tetapi, di sisi lain kafka sink konnector akan melakukan proses penyimpanan data dengan format yang berbeda. Dalam hal ini prostgre sink connector akan berbeda format dengan elasticserach sink connector dan memamang di buat dengan tujuan dan fokus yang berbeda. Keduanya mengharapkan message yang sederhana untuk bisa disimpan secara langsung.

Debezium UnwrapFromEnvelope sebagai converter atau transformer akan merubah event yang kompleks tadi menjadi baris-baris data senderhana yang diharapkan oleh kedua konektor teresebut.

Berikut adalah contoh konfigurasi untuk proses di atas.

Debezium kafka source connector config

https://debezium.io/
  1. Nama dari connector yang kita definisikan namanya.
  2. Connector konfigurasi dengan class connector mengacu ke debezium dengan task maksimum harus satu karena untukk memastikan urutan data dan penangangan terhadap event yang lebih terjamin.
  3. Seperti dijelaskan di atas maksimum task adalah 1.
  4. Properties yang berhubungan dengan akses ke database.
  5. Server id yang bisa kita definiskan sendiri tetapi harus bersifat unik dan akan digunakan sebagai prefix unutk semua kafka topic yang kita gunakan.
  6. Nama table yang akan kita monitor untuk dilakukan CDC.
  7. Kafka host dan nama topic.

Selanjutnya adalah contoh konfigurasi untuk elasticsearch sink connector.

https://debezium.io/

Ketertangan dari konfigurasi di atas.

  1. Dengan menggunakan unwrap type tersebut mengakibatkan kita mengekstraksi hanya status terbaru dari perubahan data yang di capture oleh debezium.
  2. Melakukan ekstraksi field id dari key struct. Key ini akan digunakan pada bagian source dan kedua target. Hal ini digunakan untuk membantu kenyataan bahwa elastic sink connector hanya menerima type data numerik atau string.
  3. Menyatakan bahwa kita akan menggunakan key yang kita ekstact dari event dan tidak membuat key baru.
  4. Nama event yang biasnaya bersesuaian dengan nama table yang kita prosess.

Demikianlah dengan menggunkana debezium kita dapat melakukan CDC dari sisteam lama tau mungkin dari sisteam baru tanpa harus menambahkan kode tambahan pada aplikiasi kita.

Sponsor

Membutuhkan kaos dengan tema pemrograman :

Kafka T-shirt

Elastic T-shirt

Dapat menghubungi The Legend.

--

--

D. Husni Fahri Rizal
The Legend

Engineering Leader | Start-Up Advisor | Agile Coach | Microservices Expert | Professional Trainer | Investor Pemula