RabbitMQ adalah message broker open-source yang mendukung berbagai protokol messaging dan sering digunakan dalam sistem terdistribusi untuk mengirim pesan antara aplikasi. Berikut adalah pengenalan dan beberapa aspek penting terkait RabbitMQ:
1. Pengenalan RabbitMQ
RabbitMQ adalah message broker berbasis queue yang memungkinkan aplikasi saling berkomunikasi melalui pesan. Ia mengimplementasikan Advanced Message Queuing Protocol (AMQP), meskipun juga mendukung beberapa protokol lainnya seperti MQTT dan STOMP.
RabbitMQ menyimpan pesan dalam antrian (queues), dan memungkinkan aplikasi untuk mengirim atau menerima pesan. Hal ini membuat RabbitMQ sangat bermanfaat dalam lingkungan yang memerlukan komunikasi asinkron atau sistem terdistribusi.
2. Sejarah RabbitMQ
RabbitMQ dikembangkan oleh Pivotal Software, yang merupakan bagian dari VMware, dengan tujuan untuk mendukung pengimplementasian AMQP. Pada awalnya, RabbitMQ diluncurkan pada tahun 2007, dan dengan cepat mendapatkan popularitas sebagai salah satu message broker paling andal dan stabil di komunitas open-source.
Karena dukungan yang luas terhadap berbagai protokol, skalabilitas, serta kemampuannya menangani traffic yang besar, RabbitMQ kini banyak digunakan dalam arsitektur microservices dan aplikasi skala besar.
3. Fungsionalitas Utama RabbitMQ
- Antrian Pesan (Queues): Pesan yang dikirimkan oleh produser disimpan di dalam antrian dan akan dikonsumsi oleh konsumer. Ini memisahkan proses pengiriman dan penerimaan, mendukung komunikasi asinkron.
- Exchange Types: RabbitMQ menyediakan berbagai tipe exchange yang mengatur bagaimana pesan didistribusikan ke antrian berdasarkan routing key. Tipe exchange utama:
- Direct Exchange: Mengarahkan pesan ke antrian tertentu sesuai dengan routing key.
- Fanout Exchange: Menyebarkan pesan ke semua antrian yang terhubung tanpa memperhatikan routing key.
- Topic Exchange: Mengarahkan pesan ke antrian berdasarkan pola routing key yang cocok.
- Headers Exchange: Mengarahkan pesan berdasarkan atribut header, tidak routing key.
- Pengelolaan Durabilitas: RabbitMQ mendukung durabilitas pesan dan antrian sehingga pesan tidak hilang jika broker mengalami kegagalan.
- Acknowledgments: Sistem ini mendukung acknowledgment yang memastikan pesan telah berhasil diterima oleh konsumer sebelum dihapus dari antrian.
- Clustering dan Federation: Mendukung clustering dan federation untuk menyeimbangkan beban dan distribusi pesan di antara banyak instance.
4. Protokol RabbitMQ
RabbitMQ pada dasarnya berbasis pada Advanced Message Queuing Protocol (AMQP), namun ia juga mendukung protokol lainnya:
- AMQP (Advanced Message Queuing Protocol): Protokol utama yang mendasari RabbitMQ, dirancang untuk menyediakan messaging yang andal dan interoperabilitas lintas platform.
- MQTT (Message Queuing Telemetry Transport): Protokol ringan yang sering digunakan untuk komunikasi IoT.
- STOMP (Simple Text Oriented Messaging Protocol): Protokol yang lebih sederhana dan berbasis teks, sering digunakan dalam sistem yang memerlukan komunikasi yang mudah dibaca manusia.
5. Contoh Kasus Penggunaan RabbitMQ
- Microservices: Dalam arsitektur microservices, RabbitMQ digunakan untuk memfasilitasi komunikasi antar layanan yang terpisah secara fisik, misalnya dengan mengirimkan pesan untuk memproses tugas di background.
- Task Queue: RabbitMQ umum digunakan untuk antrian tugas asinkron. Misalnya, aplikasi web dapat menempatkan tugas seperti pengiriman email ke dalam antrian untuk diproses secara terpisah.
- Data Streaming: RabbitMQ dapat digunakan untuk memproses dan mendistribusikan data real-time, seperti streaming log atau event monitoring.
- Sistem Pengiriman Notifikasi: RabbitMQ memungkinkan pengiriman notifikasi secara real-time, misalnya dalam aplikasi mobile atau platform sosial.
RabbitMQ memungkinkan pengelolaan komunikasi antar aplikasi yang efisien, terutama dalam lingkungan yang besar atau kompleks.
Perbandingan Dengan Apache Kafka
RabbitMQ dan Apache Kafka sama-sama message broker yang digunakan untuk mengelola komunikasi antar aplikasi dalam sistem terdistribusi. Namun, keduanya memiliki perbedaan signifikan dalam hal arsitektur, penggunaan, dan fungsionalitas, serta beberapa persamaan dalam tujuan utamanya.
Perbedaan RabbitMQ dan Kafka
Arsitektur dan Desain:
- RabbitMQ dirancang sebagai message broker tradisional dengan fokus pada pengiriman pesan satu per satu (message queue) dan dukungan berbagai protokol messaging (AMQP, MQTT, STOMP). Pesan dikirim dari produser ke konsumer melalui queue dan dihapus setelah diterima oleh konsumer.
- Kafka adalah platform streaming berbasis log terdistribusi. Kafka menyimpan pesan dalam log partition yang persisten. Konsumer dapat membaca pesan berulang kali, karena Kafka tidak menghapus pesan setelah dikonsumsi kecuali sudah melewati batas waktu retensi.
Pola Konsumsi Pesan:
- RabbitMQ menggunakan pola push di mana pesan aktif didorong ke konsumer, dan setiap pesan hanya dikonsumsi sekali kecuali ada kegagalan. Antrian di RabbitMQ memisahkan produser dan konsumer, memungkinkan pesan dikonsumsi secara asinkron.
- Kafka menggunakan pola pull di mana konsumer secara aktif mengambil pesan dari topic sesuai dengan posisi (offset) dalam log. Konsumer bisa memproses ulang pesan dari awal sesuai kebutuhan, sehingga Kafka mendukung replayable events.
Kasus Penggunaan:
- RabbitMQ lebih cocok untuk skenario di mana latensi rendah dan pengiriman pesan secara tepat waktu sangat penting, seperti antrian tugas (task queue) atau aplikasi yang memerlukan respons cepat (misalnya sistem real-time).
- Kafka lebih cocok untuk pengolahan data dalam jumlah besar, streaming data real-time, dan kasus yang memerlukan analisis data berulang (seperti log analytics atau event sourcing). Kafka unggul dalam throughput yang tinggi dan durasi penyimpanan pesan yang lama.
Durasi Penyimpanan Pesan:
- RabbitMQ menyimpan pesan di antrian hanya sampai pesan diterima oleh konsumer. Setelah dikonsumsi, pesan dihapus (kecuali ada pengaturan lain seperti dead-letter queue).
- Kafka menyimpan pesan selama waktu retensi yang telah ditentukan, biasanya dalam hitungan hari atau lebih lama, sehingga pesan bisa diakses kembali oleh konsumer kapan saja selama masih dalam periode retensi.
Model Pengiriman Pesan:
- RabbitMQ mendukung berbagai model pengiriman pesan, seperti point-to-point (satu produser dan satu konsumer), publish/subscribe (banyak konsumer dari satu pesan), dan routing menggunakan exchanges yang berbeda.
- Kafka menggunakan model publish/subscribe dengan topics, di mana produser menulis ke topic tertentu, dan banyak konsumer bisa membaca dari topic tersebut secara bersamaan.
Skalabilitas:
- RabbitMQ dapat di-cluster untuk meningkatkan ketersediaan dan mendistribusikan beban, tetapi skalabilitasnya terbatas pada arsitektur queue-based yang membatasi konsumsi paralel pada level pesan individu.
- Kafka sangat skalabel dengan menggunakan partisi pada topic, yang memungkinkan data diproses secara paralel oleh banyak konsumer dan replication untuk menjaga ketersediaan data.
Persamaan RabbitMQ dan Kafka
Mendukung Komunikasi Asinkron: Kedua sistem mendukung komunikasi asinkron antara produser dan konsumer, yang memungkinkan aplikasi berinteraksi tanpa harus menunggu respons langsung.
Digunakan dalam Arsitektur Microservices: Baik RabbitMQ maupun Kafka sering digunakan dalam arsitektur microservices untuk mengelola komunikasi antar layanan dan mengoptimalkan alur kerja dalam sistem yang terdistribusi.
Reliabilitas Pengiriman Pesan: Keduanya mendukung mekanisme untuk memastikan pesan diterima dan diproses dengan benar. RabbitMQ menggunakan acknowledgment pesan, sementara Kafka memanfaatkan konsep offset dan retensi untuk memastikan pesan tersedia untuk diproses ulang jika diperlukan.
High Availability: Keduanya mendukung fitur high availability melalui clustering. Kafka menggunakan replikasi partisi untuk memastikan pesan tetap tersedia jika salah satu node gagal, sementara RabbitMQ menggunakan clustering untuk replikasi antrian dan failover.
Kapan Menggunakan RabbitMQ atau Kafka?
Gunakan RabbitMQ jika:
- Membutuhkan latensi rendah dan pengiriman pesan real-time.
- Berurusan dengan tugas asinkron atau task queue di mana setiap pesan harus segera dihapus setelah diproses.
- Memerlukan komunikasi yang fleksibel dengan protokol berbeda, seperti MQTT atau STOMP.
- Memiliki beban kerja yang lebih kecil dengan kecepatan pesan yang relatif rendah.
Gunakan Kafka jika:
- Mengolah volume data besar atau memerlukan throughput tinggi.
- Ingin menyimpan pesan dalam jangka waktu yang lama untuk analisis ulang.
- Berfokus pada aplikasi yang memerlukan streaming data atau event sourcing.
- Sistem yang memerlukan skalabilitas tinggi dan partisi data yang efisien.
Table Perbandingan RabbitMQ VS Kafka
Berikut adalah tabel komparasi yang membandingkan persamaan dan perbedaan antara RabbitMQ dan Apache Kafka:
Aspek | RabbitMQ | Apache Kafka | Persamaan |
---|---|---|---|
Arsitektur | Queue-based, message broker | Log-based, distributed streaming platform | Keduanya adalah message broker untuk komunikasi asinkron |
Pola Konsumsi Pesan | Push-based (pesan dikirim ke konsumer) | Pull-based (konsumer mengambil pesan) | Mendukung komunikasi asinkron antara produser dan konsumer |
Model Penyimpanan | Pesan dihapus setelah diterima konsumer | Pesan disimpan dalam log untuk periode tertentu | Keduanya bisa di-cluster untuk meningkatkan ketersediaan |
Durasi Penyimpanan | Sampai pesan dikonsumsi, kecuali dengan DLQ | Berdasarkan periode retensi (default hari) | Mendukung reliabilitas pengiriman pesan melalui mekanisme acknowledgment dan offset |
Kasus Penggunaan | Task queue, real-time messaging, aplikasi responsif | Data streaming, big data pipeline, event sourcing | Digunakan dalam arsitektur microservices dan sistem terdistribusi |
Protokol | AMQP (default), juga mendukung MQTT, STOMP | Protokol Kafka sendiri (custom TCP-based) | Keduanya mendukung pengiriman pesan yang andal dengan replikasi |
Pengiriman Pesan | Setiap pesan dikonsumsi sekali (jika tidak ada kegagalan) | Pesan dapat dibaca berulang kali (replayable) | Keduanya mendukung publish/subscribe |
Skalabilitas | Skalabilitas terbatas oleh model antrian | Skalabilitas tinggi dengan partisi topics | Mendukung clustering dan distribusi pesan |
Pengelolaan Beban | Mendukung fair dispatch, tetapi skala terbatas | Mendukung throughput sangat tinggi | Dapat mendistribusikan pesan ke banyak konsumer secara paralel |
Durabilitas | Mendukung durabilitas antrian dan pesan | Pesan persisten di disk selama periode retensi | Memberikan dukungan untuk pengiriman pesan yang andal |
Latensi | Latensi rendah, ideal untuk komunikasi cepat | Latensi relatif lebih tinggi dibanding RabbitMQ | Keduanya dapat dioptimalkan untuk high availability |
Kebutuhan Resource | Memerlukan lebih sedikit resource untuk pesan kecil | Memerlukan lebih banyak resource untuk throughput tinggi | Cocok untuk integrasi dalam arsitektur skala besar |
Penanganan Konsumer | Konsumer menerima pesan satu per satu, dihapus setelahnya | Konsumer membaca pesan dengan offset, tidak dihapus | Keduanya mendukung banyak produser dan konsumer |
Tabel ini menguraikan poin-poin utama terkait perbedaan dan persamaan antara RabbitMQ dan Kafka dalam hal penggunaan dan fungsionalitas, memudahkan untuk memilih broker yang tepat sesuai kebutuhan sistem.
RabbitMQ dan Kafka adalah dua alat yang kuat namun memiliki fokus berbeda. RabbitMQ lebih cocok untuk aplikasi dengan kebutuhan komunikasi yang cepat dan ringan, sementara Kafka lebih cocok untuk sistem dengan skala besar yang berfokus pada pemrosesan data secara berkelanjutan atau streaming. Memilih antara keduanya bergantung pada jenis arsitektur dan alur kerja yang ingin dicapai.
Instalasi RabbitMQ dengan Docker Desktop
RabbitMQ Image Pull |
RabbitMQ Image versi management dengan plugin rabbitmq_management |
Ini adalah beberapa image yang sudah ada di laptop saya kita pakai yang 4.0.3 Management |
Port yang di forward ke HOSTS |
ganti username dan password (defaultnya guest/guest) |
Env variable username dan password sebelumnya |
Comments
Post a Comment