Showing posts with label kafka. Show all posts
Showing posts with label kafka. Show all posts

Sunday, March 18, 2018

Oracle Stream Analytic - Target Kafka

Setelah sebelumnya saya sudah membuat introduction tentang apa itu Oracle Stream Analytic (OSA) dan melakukan Streaming dari media sosial Twitter pada tautan http://blog.nostratech.com/2017/12/oracle-stream-analytic-twitter-stream.html, pada kesempatan kali ini saya akan berbagi bagaimana caranya mengirimkan data hasil dari Streaming yang dilakukan oleh OSA ke dalam Kafka.
Bagi yang belum tahu apa itu Kafka, Kafka adalah sebuah distributed streaming platform dimana salah satu tugasnya adalah sebagai Producer dan Subscriber untuk sebuah messaging system. Dengan kata lain, Kafka mampu untuk menyimpan aliran data yang diberikan oleh OSA dan selanjutnya mampu juga untuk mendistribusikan data tersebut kepada sistem lain. Untuk memahami lebih lanjut, silahkan kunjungi tautan berikut https://kafka.apache.org/.
Untuk dapat mengikuti tutorial ini, beberapa hal harus anda siapkan sebagai syarat untuk dapat melakukannya dengan benar. Pertama, anda harus sudah memiliki Kafka yang sudah aktif Zookeeper dan Servernya. Cara melakukannya anda dapat melihat pada tautan berikut https://kafka.apache.org/quickstart. Saya tidak akan menjelaskan detail bagaimana cara melakukan instalasi Kafka dan diasumsikan Kafka sudah siap dipakai.
Jika Kafka sudah terinstal, hal pertama yang harus anda lakukan adalah membuat Topic pada kafka yang sudah terinstal dengan cara menjalankan command berikut :
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic example
Untuk memastikan apakah Topic sudah terbuat atau belum, anda dapat melihatnya menggunakan command berikut :
bin/kafka-topics.sh --list --zookeeper localhost:2181






Dari hasil capture di atas, topic example sudah terbuat dan siap untuk dipakai sebagai Target tempat menyimpan aliran data hasil dari OSA.
Hal kedua yang diperlukan adalah aliran data dari OSA itu sendiri. Jika anda belum membuatnya, silahkan anda melihat tutorial berikut :

http://blog.nostratech.com/2017/12/oracle-stream-analytic-twitter-stream.html

Jika aliran data stream sudah siap, maka hal selanjutnya adalah membuat connection untuk menghubungkan antara OSA dengan Kafka yang sebelumnya sudah kita buat :





Untuk membuat connection, kita harus mendaftarkan connection baru yang bertipe Kafka dan juga mendaftarkan IP dan Port dari Zookeepers dan Kafka Server.

Jika connection sudah siap, maka selanjutnya hal yang harus dibuat adalah Target untuk menentukan aliran data dari OSA akan disimpan di topic yang mana. Karena kita sudah membuat topic bernama "example", maka "example" ini akan menjadi tempat untuk menyimpan aliran data dari OSA. Berikut adalah tata cara membuat Target baru pada OSA :





Target yang dibuat bertipe Kafka dengan connection Kafka yang sudah kita buat sebelumnya yang bernama "kafka" dan topic yang sudah dibuat juga sebelumnya yang bernama "example". Untuk shape, karena pada aliran data berbentuk "Twitter Shape", maka bentuknya pun disamakan. Bentuk ini tergantung dari kebutuhan dan bisa disesuaikan.
Sekarang, kedua aliran data dan juga target Kafka sudah siap diapakai. Hal terakhir adalah dengan menghubungkan kedua entitas tersebut agar sistem dapat berjalan. Hal yang harus dilakukan adalah membuka "exploration" dari aliran data yang sudah ada dan kita set target yang sudah kita buat lalu lakukan publish seperti pada penjelasan berikut :





Kafka" dan klik tombol "Save". Jika sudah, klik tombol "Publish" seperti gambar diatas agar sistem dapat berjalan.

Untuk memastikan apakah OSA mengirimkan lairan data kepada Kafka, dapat dilihat dengan cara memasukkan command berikut untuk melihat aliran data yang masuk ke dalam topic "example" :


bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic example --from-beginning

Java Kafka Streammer

Kafka adalah platform streamer yang membuat jaringan pipeline data secara realtime yang mempunyai kemampuan publish dan subcribe record data atau antrian pesan. Platform tersebut bertindak sebagai platform terpadu untuk menangani semua umpan data realtime. Umumnya kafka digunakan untuk membangun sistem streamer realtime antara data sistem dan aplikasi ataupun aplikasi streamming yang bereaksi terhadap arus data.

Installasi dijelaskan cukup lengkap di http://kafka.apache.org/quickstart termasuk cara menjalankan server zookeepers dan server kafkanya sendiri. Untuk konfigurasi bisa dilihat di folder config yang editable. Selanjutnya kita harus membuat topic yang digunakan untuk menampung record baik yang di produce ataupun di consume.

Kafka mendukung bahasa pemprograman java untuk mengakses server dengan konfigurasi sederhana. Langkah selanjutnya adalah setting di java(maven project) dengan menambahkan dependency kafka client, tambahkan code dibawah pada file pom:

<dependency>
    <groupId>org.apache.kafka</groupId>
    <artifactId>kafka-clients</artifactId>
    <version>1.0.1</version>
</dependency>

Setelah itu tinggal kita atur konfigurasi untuk sent dan receive di service java. Code untuk mem-produce pesan nya kurang lebih seperti dibawah:

Ketika service sent di hit(via postman, controller code dibawah), akan membaca parameter loop, dan jika kita lihat consume di topic1 akan terlihat seperti gambar 1. Pesan tersebut sudah ter-streamming di server kafka, dan dapat di consume oleh banyak client dengan menggunakan topic yang sama. Untuk konfigurasi karena kafka saya jalankan di local, maka pada producer configuration menggunakan ip local 127.0.0.1. jika kafka dijalankan di server, maka tinggal diganti hostnya. Dalam sekali kirim kafka hanya memakan waktu 10ms secara asynchronous.

 Gambar 1. Output consume topic1
 
Untuk yang consume streammer dari kafka, codenya seperti dibawah. Konfigurasi server sama-sama menggunakan server localhost, dan yang penting diketahui adalah konfigurasi group id si consumer yang dapat dilihat di consumer.properties harus sama dengan yang kita set. Consumer.poll akan “fetch” data sebanyak 300x dari si producer.




ketika kita hit recieve service, dan memasukan pesan via terminal kafka, pesan tersebut akan di-return seperti gambar 2.
 Gambar 2. Contoh konsume dari streammer kafka

Untuk code di controller seperti di bawah:


Nah, cukup jelas bukan? Aplikasi dari streaming kafka ini cukup luas, seperti untuk analisis data realtime dan membutuhkan decision yang harus ditentukan saat itu juga, maka dengan service di java dapat menjadi solusi permasalahan tersebut. Selain service di java, streamer kafka juga dapat menerima dan mengirim data ke streamer lain seperti OSA(Oracle Streammer Analytic).
Happy Sunday :)