Kafka Connect dan Debezium

Streaming Platform

D. Husni Fahri Rizal
The Legend
4 min readApr 22, 2020

--

https://docs.confluent.io/

Umumnya jika kita mau mempublish data atau message ke sebuah topic kafka setelah operasi seperti save, update, dan delete maka pada waktu bersamaan kita mengirimkan event ke kafka melalui topic yang telah kita definisikan. Lebih tepatnya kita menyimpan kode untuk proses pengiriman event setelah proses penyimpanan data ke database selesai dieksekusi.

Prosess penyimpadan data ke database dilanjutkan dengan proses pengiriman data ke topic kafka

Dengan perlakuan di atas kita berharap proses event ke kafka akan dilakukan jika proses penyimpanan ke database berhasil. Apabila proses penyimpanan gagal maka proses event ke kafka tidak diakukan. Atau apabila diperlukan kita dapat juga membungkus kedua proses tersebut dengan transaksional sehigga apabila terjadi error termasuk error dari process ke kafka maka proses penyimpanan di database dilakukan rollback.

Cara di atas bukan lah cara yang salah dan pada dasarnya merupakan cara yang umum dilakukan. Akan tetapi, cara di atas membutuhkan effort lebih seperti tambahan kode dan penanganan kode yang lumayan tidak sederhana. Dengan demikian, kita membutuhkan waktu dan resource team yang cukup lumayan untuk melakukan hal tersebut. Selain itu, pendekatan di atas akan efektif apabila kita masih dalam tahap development dan sudah berencana mengunakan kafka sebelum pembuatan kode dimulai

Berbeda lagi ceritanya apabila kita tengah melakukan rewrite atau migrasi dari monolith ke microservice misalnya. Di sini lain, umumnya pendekatan yang disarankan ketika melakukan migrasi dari mono to micro adalah dengan menggunakan pendekatan strangler pattern.

Sebutlah sebagai contoh kita membuat satu service dengan tujuan sebagai search engine dengan teknologi elasticserach. Biasanya pattern CQRS digunakan sebagai pattern untuk pembuatan service ini. Aplikasi lama ini merupakan monoltih yang dibangun di atas mysql misalnya. Apabila ada perubahan data maka data tersebut harus kita transfer ke elasticserach agar dapat digunakan datanya oleh search engine tersebut.

Apabila cara yang kita lakukan adalah menambahkan pada setiap process di monolith suatu kode yang mempublish event ke message broker dalam hal ini misalkan kafka, maka hal ini bukanlah suatu pendekatan yang bagus dan mudah. Kita harus melakukan pekerjaan tambahan berupa penambahan kode baru yang tentu tidak mudah yang pada akhirnya kurang bermanfaat karena pada akhirnya sisteam monoltith dikemudian hari akan di take down juga.

Salah salu solusi untuk menjawab hal tersebut di atas dapat kita gunakan suatu plugin yang dibuat oleh confluent yaitu kafka connect. Kafka conect merupakan plugin yang dapat kita deploy pada kafka dan sudah perkenalkan sejak kafka versi 0.9. Kafka connect ini memberikan kemudahan untuk integrasi antara kakfa dengan sistem lainnya tanpa harus melakukan tambahan kode hanya berupa konfigurasi.

Hanya konfigurasi (basic configuration) tidak ada kode apapun

Perlu di perhatikan maksud kita melakukan deploy bukan berarti kafka connect ini akan berjalan di dalam broker kafka. Setiap kafka connect akan berjalan dalam worker tersendiri terpisah dari kafka broker.

Bagaimana kafka connect bisa menyambungkan data sorce dan targer (sink) secara mudah dan sederhana

Dengan hanya melakukan konfigurasi system maka kita dapat dengan mudah melakukan transer data dari dan ke sistem lain di luar kafka.

Kafka Connect Feature

Berikut adalah beberapa featur dari kafka connect ini.

  1. A common framework untuk Kafka connectors
  2. Distributed dan standalone mode
  3. REST interface
  4. Automatic offset management
  5. Distributed and scalable secara default
  6. Streaming dan batch integration
  7. Autorecovery ketika terjadi failure
  8. Simple Paparel mekanisme
  9. Auto failover
  10. Avro, json, grcp,atau cvs serialisasi dan schema

Kafka connect dapat dikelompokan ke dalam dua kelompok, yaitu jenis kafka source connector yang berguna untuk mengambil data dan mengirimkannya ke kafka serta yang kedua adalah kafka sink connnector yang berguna untuk menuliskan data dari kafka ke media penyimpanan lainnnya.

Kafka Source dan Sink Connector

Ketika penulis membuat artikel ini sudah cukup banyak kafka source dan sink connector yang dibuat oleh pihak confluent. Tercatat sebanyak sebanyak 75 source connwctor dan 83 sink connector yang dapat kita gunakan untuk berbagai kebutuhan. Berikut adalah link detil untuk list kakfa source dan sink connector tersebut. https://www.confluent.io/hub/.

Sebagai contoh kita akan membahas salah satu kakfa connector yaitu, kafka-jdbc connector.

JDBC Connector

Jdbc source connector biasanya sudah buildin dalam kafka bawaan dari Confluent Platform tetapi kita dapat juga menginstallnya secara manual dari Confluent Hub. Dengan jdbc connector ini kita bisa melakukan pull data dan mengirimkannya ke kafka dan dapat menuliskannya kembali ke rdbms lainnya.

Untuk lebih detil penjelasan bagaimana cara instalasi dan konfigurasi dapat lebih jelas pada link berikut.https://www.confluent.io/blog/kafka-connect-deep-dive-jdbc-source-connector/

Selain dari confluent secara langsung, terdapat pula plugin yang di buat oleh pihak ke tiga. Salah satunya adalah Debezium. Debezium adalah plugin yang dibagun di atas kafka connect yang dibuat oleh RedHat. Pembahasan selanjutnya mengenai kelebihan dan kegunaan dari Debezium akan kita bahas di artikel berikut.

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