# Apache Kafka
## Apa itu apache kafka ? ...
Aplikasi yang bisa digunakan untuk melakukan publish (Mengirim data) dan subscribe (menerima data) pada sebuah aplikasi microservices, sehingga data yang dikirim dari sebuah aplikasi microservices (publish) akan dikirimkan terlebih dahulu ke topic lalu dari topic/message broker data akan dikrimkan ke aplikasi microservice yang melakukan subscribe (menerima). Bedanya dengan transaksi pada sebuah database adalah dengan melakukan sebuah query untuk mendapatkan sebuah data yang di inginkan dan dikirimkan sesuai dengan alamatnya.
## Analogi Apache Kafka (Publish and Subscribe)
### Sebelum Publish and Subscribe

Pada gambar diatas adalah analogi sebelum menggunakan publish dan subscribe, sehingga data yang ada pada database dikirimkan ke sebuah aplikasi microservices yang membutuhkan data tersebut dan cara ini akan lebih rumit jika banyak sekali service yang membutuhkan sebuah data dan jika ada aplikasi service yang tidak berjalan pada proses transaksi data bisa hilang atau aplikasi error.
### Setelah Publish and Subscribe

Pada gambar diatas adalah analogi menggunakan publish dan subscribe dimana untuk pengiriman data (publish) akan disimpan di message broker dan yang akan menerima data (subscribe) akan dikirim dari message brokernya langsung. Jika pada proses penerimaan data (subscribe) gagal dikarenakan aplikasinya terjadi error maka data yang dikirimkan tersebut tetap aman tersimpan di message broker dan message broker dapat mengetahui apakah data tersebut telah diterima oleh aplikasi atau belum.
## Producer vs Consumer

Disini saya asumsikan agar mudah dipahami, untuk producer sama halnya dengan publish yang bertugas mengirim data ke message broker dan consumer sama halnya juga subscribe yang bertugas menerima sebuah data dari message broker.
## Arsitektur Apache Kafka

1. Producers = Yang mengirim data pada message broker (Kafka Cluster).
2. Consumers = Yang menerima data dari message broker (Kafka Cluster).
3. kafka Cluster = Kumpulan dari aplikasi2 kafka.
4. Connectors = Integrasi sebuah aplikasi external, contohnya database dmn database tersebut akan menyimpan datanya di kafka.
5. Stream Processors = Mengolah data yang mengalir terus.

Zookeeper = Untuk memanagement kafka cluster
## TOPIC

Data di kafka yang disimpan dalam topic berbeda dengan data yang disimpan di dalam database.
Data yang ada pada kafka yang disimpan di topic itu bisa berupa sebuah event atau suatu kejadian.
## Partition Topic

1. Partition topic adalah untuk memecah sebuah data, sebagai contoh ada data 1GB yang akan disimpan lalu dipartisi menjadi 2 bagian sehingga partisi yang pertama memegang 500MB data dan partisi yang kedua memegang 500MB data.
2. 1 Producers akan selalu menyimpan data pada 1 block partisi yang baru, sehingga block partisi akan terus bertambah.
3. 1 Consumer akan mengakses data pada 1 block partisi yang baru dan tidak bisa mengakses pada block partisi yang sebelumnya, maka dari itu producer juga menyimpan data selalu pada block partisi yang baru.
4. Offset adalah block partisi keberapa consumer menerima data, ini penting sekali karena jika sebuah aplikasi menerima data pada contoh pada block partisi ke 3 (offset=3) dan aplikasi tersebut mati atau error maka tetap jika aplikasi hidup kembali dia akan menerima data mulai dari block partisi terbaru yaitu 4 (offset=4).
## Replication

1. Pada gambar diatas terdapat 3buah server kafka.
2. P1 dan P2 adalah Topic Primary
3. R1 dan R2 adalah Replikasi topic.
Sebagai contoh ada data/topic yang akan disimpan dengan ukuran 1GB lalu di partisi menjadi 2 bagaian yaitu P1 memegang partisi topic 500MB dan P2 memegang partisi topic 500MB, lalu kita mereplikasi / menduplikasi kedua topic primary tersebut jadi R1 yang mereplikasi P1 dan R2 mereplikasi P2 sehingga total topic atau data berukuran 2GB. Replikasi akan otomatis tersimpan dibeda server kafka.
## Consumer Group
Consumer Group adalah aplikasi yang dikelompokan untuk menerima data sesuai dengan kebutuhannya.

Gambar diatas adalah contoh consumer yang belum dikelompokan. Sebagai contoh analoginya kedua aplikasi tersebut menerima data dari partisi topic P1 dan P2 yang dimana aplikasi tersebut adalah aplikasi payment untuk pembayaran dan data yang diterimanya ialah order, tidak mungkin jika 1 order tapi membayar 2 orderan, perhatikan panah pada consumer kedua aplikasi.

Pada gambar diatas adalah contoh dari consumer group, sebagai contoh analogi consumer sebagai aplikasi payment yang bertugas melakukan pembayaran dimana berdasarkan dari kiriman data order, bisa dilihat pada panahnya 1 aplikasi menerima 1 data order.