Kapan pun kami ingin mengintegrasikan perantara pesan ke dalam aplikasi kami yang memungkinkan kami untuk menskalakan dengan mudah dan menghubungkan sistem kami secara asinkron, ada banyak perantara pesan yang dapat membuat daftar dari mana Anda diminta untuk memilih salah satu, seperti:
- KelinciMQ
- Apache Kafka
- AktifMQ
- AWS SQS
- Redis
Masing-masing broker pesan ini memiliki daftar pro dan kontra sendiri, tetapi opsi yang paling menantang adalah dua yang pertama, RabbitMQ dan Apache Kafka. Dalam pelajaran ini, kami akan membuat daftar poin-poin yang dapat membantu mempersempit keputusan untuk memilih satu dari yang lain. Akhirnya, perlu ditunjukkan bahwa tidak ada yang lebih baik dari yang lain dalam semua kasus penggunaan dan itu sepenuhnya tergantung pada apa yang ingin Anda capai, jadi tidak ada satu jawaban yang benar!
Kami akan mulai dengan pengenalan sederhana alat-alat ini these.
Apache Kafka
Seperti yang kami katakan dalam pelajaran ini, Apache Kafka adalah log komit yang terdistribusi, toleran terhadap kesalahan, dapat diskalakan secara horizontal. Ini berarti bahwa Kafka dapat melakukan pembagian dan aturan dengan sangat baik, dapat mereplikasi data Anda untuk memastikan ketersediaan dan sangat skalabel dalam arti bahwa Anda dapat menyertakan server baru saat runtime untuk meningkatkan kapasitasnya untuk mengelola lebih banyak pesan.
Kafka Produsen dan Konsumen and
KelinciMQ
RabbitMQ adalah tujuan yang lebih umum dan lebih sederhana untuk menggunakan broker pesan yang dengan sendirinya menyimpan catatan tentang pesan apa yang telah dikonsumsi oleh klien dan bertahan yang lain. Bahkan jika karena alasan tertentu server RabbitMQ down, Anda dapat yakin bahwa pesan yang saat ini ada di antrian telah disimpan di Filesystem sehingga ketika RabbitMQ muncul kembali, pesan tersebut dapat diproses oleh konsumen secara konsisten.
RabbitMQ Bekerja
Kekuatan Super: Apache Kafka
Kekuatan super utama Kafka adalah dapat digunakan sebagai sistem antrian tetapi bukan itu yang terbatas pada. Kafka adalah sesuatu yang lebih seperti penyangga melingkar yang dapat menskalakan sebesar disk pada mesin di cluster, sehingga memungkinkan kami untuk dapat membaca ulang pesan. Ini dapat dilakukan oleh klien tanpa harus bergantung pada klaster Kafka karena klien sepenuhnya bertanggung jawab untuk mencatat metadata pesan yang sedang dibacanya dan dapat mengunjungi kembali Kafka nanti dalam interval tertentu untuk membaca pesan yang sama lagi.
Harap dicatat bahwa waktu di mana pesan ini dapat dibaca kembali terbatas dan dapat dikonfigurasi dalam konfigurasi Kafka. Jadi, setelah waktu itu habis, tidak mungkin klien dapat membaca pesan lama lagi.
Kekuatan Super: RabbitMQ
Kekuatan super utama RabbitMQ adalah skalabilitasnya yang sederhana, merupakan sistem antrian berkinerja tinggi yang memiliki aturan konsistensi yang terdefinisi dengan baik, dan kemampuan untuk membuat berbagai jenis model pertukaran pesan. Misalnya, ada tiga jenis pertukaran yang dapat Anda buat di RabbitMQ:
- Pertukaran Langsung: Pertukaran topik satu lawan satu
- Pertukaran Topik: A tema didefinisikan di mana berbagai produsen dapat mempublikasikan pesan dan berbagai konsumen dapat mengikat diri untuk mendengarkan topik itu, sehingga masing-masing dari mereka menerima pesan yang dikirim ke topik ini.
- Pertukaran fanout: Ini lebih ketat daripada pertukaran topik karena ketika sebuah pesan dipublikasikan di pertukaran fanout, semua konsumen yang terhubung ke antrian yang mengikat dirinya ke pertukaran fanout akan menerima pesan tersebut.
Sudah memperhatikan perbedaannya antara RabbitMQ dan Kafka? Bedanya, jika konsumen tidak terhubung ke pertukaran fanout di RabbitMQ saat pesan dipublikasikan, pesan tersebut akan hilang karena konsumen lain telah mengkonsumsi pesan tersebut, tetapi ini tidak terjadi di Apache Kafka karena konsumen mana pun dapat membaca pesan apa pun. sebagai mereka mempertahankan kursor mereka sendiri.
RabbitMQ adalah broker-sentris
Broker yang baik adalah seseorang yang menjamin pekerjaan yang dilakukannya sendiri dan itulah keahlian RabbitMQ. Itu miring ke arah jaminan pengiriman antara produsen dan konsumen, dengan pesan yang lebih disukai sementara daripada pesan yang tahan lama.
RabbitMQ menggunakan broker itu sendiri untuk mengelola status pesan dan memastikan bahwa setiap pesan terkirim ke setiap konsumen yang berhak.
RabbitMQ menganggap bahwa sebagian besar konsumen sedang online.
Kafka adalah produser-sentris
Apache Kafka adalah produsen-sentris karena sepenuhnya didasarkan pada partisi dan aliran paket acara yang berisi data dan mengubahnya menjadi perantara pesan yang tahan lama dengan kursor, mendukung konsumen batch yang mungkin offline, atau konsumen online yang menginginkan pesan dengan latensi rendah.
Kafka memastikan bahwa pesan tetap aman sampai jangka waktu tertentu dengan mereplikasi pesan pada node di cluster dan mempertahankan keadaan yang konsisten.
Jadi, Kafka tidak menganggap bahwa salah satu konsumennya sebagian besar online dan tidak peduli.
Pemesanan Pesan
Dengan RabbitMQ, pesanan penerbitan dikelola secara konsisten dan konsumen akan menerima pesan dalam pesanan yang diterbitkan itu sendiri. Di sisi lain, Kafka tidak melakukannya karena menganggap pesan yang diterbitkan bersifat berat sehingga konsumen lambat dan dapat mengirim pesan dalam urutan apa pun, sehingga tidak mengelola pesanannya sendiri juga. Padahal, kita dapat menyiapkan topologi serupa untuk mengelola pesanan di Kafka menggunakan pertukaran hash yang konsisten atau plugin sharding., atau bahkan lebih banyak jenis topologi.
Tugas lengkap yang dikelola oleh Apache Kafka adalah untuk bertindak seperti "peredam kejut" antara aliran peristiwa yang berkelanjutan dan konsumen di mana beberapa dari mereka online dan yang lain dapat offline - hanya memakan batch per jam atau bahkan setiap hari.
Kesimpulan
Dalam pelajaran ini, kita mempelajari perbedaan utama (dan juga persamaan) antara Apache Kafka dan RabbitMQ. Di beberapa lingkungan, keduanya telah menunjukkan kinerja yang luar biasa seperti RabbitMQ mengkonsumsi jutaan pesan per detik dan Kafka telah mengkonsumsi beberapa juta pesan per detik. Perbedaan arsitektur utama adalah bahwa RabbitMQ mengelola pesannya hampir di dalam memori dan karenanya, menggunakan cluster besar (30+ node), sedangkan Kafka benar-benar memanfaatkan kekuatan operasi I/O disk sekuensial dan membutuhkan lebih sedikit perangkat keras.
Sekali lagi, penggunaan masing-masing masih tergantung sepenuhnya pada kasus penggunaan dalam suatu aplikasi. Selamat berkirim pesan !