1、Skenario penerapan
1.RabbitMQ:
Cocok untuk skenario yang menuntut kemudahan penggunaan dan fleksibilitas tinggi
Pemrosesan tugas asinkron:RabbitMQ menyediakan mekanisme pengiriman pesan yang andal dan cocok untuk menangani tugas asinkron. Misalnya, tugas yang memakan waktu dimasukkan ke antrean pesan, lalu diproses secara asinkron oleh konsumen, sehingga meningkatkan kecepatan respons dan skalabilitas sistem.
Memisahkan ketergantungan antarkomponen sistem:dengan menggunakan RabbitMQ sebagai middleware pesan, berbagai komponen sistem dapat berkomunikasi melalui pesan untuk mengurangi ketergantungan, mewujudkan arsitektur dengan keterikatan longgar, serta meningkatkan kemudahan pemeliharaan dan fleksibilitas sistem.
Arsitektur berbasis peristiwa:pola publikasi-langganan RabbitMQ dapat digunakan untuk membangun arsitektur berbasis peristiwa, dengan menerbitkan peristiwa dalam sistem sebagai pesan ke topik yang sesuai, sementara konsumen yang berbeda dapat berlangganan topik yang diminati untuk melakukan pemrosesan terkait.
2.RocketMQ:
Cocok untuk pemrosesan data berskala besar dan skenario dengan throughput tinggi
Transaksi terdistribusi: RocketMQ mendukung pesan transaksi terdistribusi, cocok untuk skenario transaksi terdistribusi yang melibatkan beberapa sistem bisnis, memastikan konsistensi dan keandalan pesan sekaligus menyediakan kemampuan pengiriman pesan dengan throughput tinggi.
Pemrosesan log secara waktu nyata: Karena RocketMQ memiliki throughput tinggi dan latensi rendah, RocketMQ dapat digunakan untuk pemrosesan log secara waktu nyata, misalnya untuk pengumpulan dan analisis log, agregasi log, serta skenario lainnya.
Pemrosesan aliran: RocketMQ mendukung mode pemrosesan aliran, yang dapat meneruskan aliran data yang dihasilkan melalui antrean pesan ke kerangka kerja pemrosesan aliran(seperti Flink、Spark Streaming), untuk mewujudkan pemrosesan dan analisis data secara waktu nyata.
3.Kafka:
Cocok untuk pemrosesan aliran data waktu nyata dengan kapasitas pemrosesan tinggi dan skenario pemrosesan aliran
Jalur data dan pemrosesan data waktu nyata:throughput tinggi dan kemampuan penyimpanan persisten Kafka menjadikannya pilihan ideal untuk membangun jalur data dan sistem pemrosesan data waktu nyata yang andal, untuk pengumpulan, pengiriman, dan pemrosesan aliran data.
Pemrosesan log dan aliran peristiwa:fitur partisi dan jaminan urutan Kafka menjadikannya solusi ideal untuk memproses log dan aliran peristiwa, seperti pengumpulan log aplikasi, event sourcing, pemantauan bisnis, dan sebagainya.
Analisis aliran waktu nyata dan pembelajaran mesin:Kafka digunakan bersama kerangka kerja pemrosesan aliran(seperti Flink、Spark Streaming)untuk mendukung analisis aliran waktu nyata dan tugas pembelajaran mesin, dengan memproses aliran data waktu nyata guna memperoleh wawasan dan dukungan pengambilan keputusan secara langsung.
2、Arsitektur layanan
RabbitMQ
Channel(kanal):Channel adalah koneksi virtual antara RabbitMQ dan aplikasi. Dengan membuat beberapa kanal di atas satu koneksi fisik(connection), aplikasi dapat melakukan operasi pengiriman pesan secara serentak. Kanal bertugas mengirim dan menerima pesan, serta menjalankan beberapa operasi terkait pesan, seperti mendeklarasikan antrean, mendefinisikan exchange, dan membuat binding. Kanal dapat dianggap sebagai sesi ringan yang berinteraksi dengan RabbitMQ melalui satu koneksi fisik.
Exchange (penukar pesan): Exchange merupakan pusat penerimaan dan penerusan pesan. Saat pesan dikirim ke RabbitMQ, pesan akan dirutekan melalui exchange. Berdasarkan jenis dan aturan binding-nya, exchange merutekan pesan ke satu atau beberapa antrean. Jenis exchange yang umum meliputi direct, topic, fanout, dan headers.
Queue(antrean):Antrean adalah penyangga yang digunakan RabbitMQ untuk menyimpan pesan. Ketika pesan tidak dapat langsung dirutekan ke konsumen, pesan akan disimpan dalam antrean sambil menunggu konsumen mengambil dan memprosesnya. Setiap antrean memiliki nama yang unik, dan pengiriman serta konsumsi pesan dilakukan menurut urutan FIFO(yang pertama masuk, pertama keluar).
Virtual Host(host virtual):host virtual adalah lingkungan yang terisolasi secara logis untuk membagi server RabbitMQ menjadi beberapa bagian independen. Setiap host virtual memiliki exchange, antrean, binding, dan pengaturan izinnya sendiri. Host virtual membantu mengisolasi aplikasi atau layanan yang berbeda serta menyediakan kendali atas keamanan dan pengelolaan sumber daya.
Broker(perantara):Broker adalah instans server antrean pesan RabbitMQ yang bertanggung jawab menerima, menyimpan, dan merutekan pesan. Broker berperan sebagai perantara yang meneruskan pesan dari produsen kepada konsumen. Satu instans RabbitMQ dapat mencakup beberapa Broker, dan setiap Broker dapat menampung beberapa host virtual serta antrean.
RocketMQ
NameServer(server penamaan):NameServer adalah komponen layanan penamaan RocketMQ yang digunakan untuk mengelola dan menyediakan informasi perutean Broker. Komponen ini berperan sebagai pusat metadata dan bertanggung jawab memelihara informasi pendaftaran Broker, informasi perutean Topic, dan sebagainya. Sebelum mengirim dan menerima pesan, Producer dan Consumer perlu berinteraksi dengan NameServer untuk memperoleh informasi Broker yang benar.
Controller(pengendali):Controller adalah komponen pengendali RocketMQ yang bertanggung jawab mengoordinasikan dan mengelola operasi seluruh klaster RocketMQ. Komponen ini memantau perubahan status Broker, menangani penambahan dan pengurangan kapasitas klaster, melakukan penyeimbangan beban, serta operasi lainnya. Controller merupakan salah satu komponen inti klaster RocketMQ yang memastikan pengoperasian klaster secara andal dan pengelolaan otomatis.
Broker(perantara):Broker adalah simpul penyimpanan dan pemrosesan pesan RocketMQ. Ia bertanggung jawab menerima pesan dari Producer dan menyimpannya ke disk. Broker juga menangani permintaan penarikan pesan dari Consumer serta mengirimkan pesan kepada Consumer untuk dikonsumsi. Sebuah klaster RocketMQ dapat berisi beberapa Broker, dan setiap Broker menyimpan sebagian data pesan Topic。
KafkaMQ
Broker(perantara):Broker adalah sebuah simpul dalam klaster Kafka yang bertanggung jawab menyimpan dan memproses pesan. Setiap Broker merupakan instans server Kafka yang berdiri sendiri. Broker dapat berupa server fisik tersendiri, mesin virtual, atau kontainer. Sebuah klaster Kafka dapat mencakup beberapa Broker yang bekerja sama untuk mewujudkan pengiriman pesan dengan ketersediaan tinggi dan throughput tinggi.
Topic(topik):Topic adalah klasifikasi logis atau topik pesan. Topic merupakan satuan penerbitan dan langganan pesan. Producer menerbitkan pesan ke Topic yang ditentukan, sedangkan Consumer berlangganan Topic yang diminati untuk menerima pesan. Topic dapat dianggap sebagai wadah pesan, yang digunakan untuk mengklasifikasikan dan mengelompokkan pesan-pesan terkait.
Partition(partisi):Topic dapat dibagi menjadi satu atau beberapa partisi, dan setiap partisi merupakan bagian dari Topic. Partisi adalah unit terkecil dalam penyimpanan dan pengiriman pesan. Secara fisik, setiap partisi berkorespondensi dengan satu berkas log tersendiri, dan partisi-partisi tersebut tersebar di berbagai Broker. Partisi memungkinkan Kafka melakukan penskalaan horizontal dan pemrosesan paralel, sekaligus memberikan throughput yang lebih tinggi. Pesan dalam setiap partisi disimpan dan dikirim berdasarkan urutan masuk pertama, keluar pertama.
3、Persistensi dan keandalan:
RabbitMQ:RabbitMQ menggunakan mekanisme persistensi pesan, dengan menyimpan pesan ke disk untuk menjamin keandalannya. RabbitMQ mendukung berbagai mekanisme konfirmasi pesan dan transaksi yang dapat menjamin pengiriman pesan secara andal.
RocketMQ:RocketMQ memiliki kemampuan persistensi dan keandalan yang kuat, mendukung mekanisme penulisan ke disk secara sinkron serta replikasi asinkron, dan dapat memberikan jaminan pengiriman pesan dengan keandalan tinggi.
Kafka:Kafka menyimpan pesan secara persisten, dengan menuliskannya ke berkas log di disk. Melalui mekanisme partisi dan replikasi, Kafka menyediakan keandalan tinggi dan kemampuan penyimpanan persisten.
4、Kapasitas pemrosesan
RabbitMQ: Throughput RabbitMQ biasanya lebih rendah, cocok untuk skenario aplikasi berskala kecil hingga menengah. RabbitMQ sesuai untuk skenario aplikasi berskala kecil hingga menengah dan biasanya mampu menangani pesan pada orde puluhan ribu hingga ratusan ribu. Fokus utamanya adalah pengiriman pesan yang andal dan persistensi pesan; kebutuhan throughput tinggi mungkin memerlukan optimasi dan penyesuaian.
RocketMQ:RocketMQ memiliki throughput yang tinggi, dengan kemampuan pemrosesan pesan hingga skala jutaan. Kinerjanya unggul dalam skenario transaksi terdistribusi dan pengiriman pesan berskala besar.
Kafka:Kafka adalah sistem antrean pesan yang terkenal dengan throughput tinggi,mampu menangani jutaan pesan atau bahkan lebih。Kafka cocok untuk skenario dengan throughput tinggi seperti pemrosesan data berskala besar、pemrosesan aliran data waktu nyata dan pemrosesan log。
5、Waktu respons
6、Komunitas dan ekosistem
RabbitMQ:RabbitMQ memiliki ekosistem plugin dan alat yang kaya, dengan dukungan komunitas pengembang yang luas.
RocketMQ:RocketMQ digunakan secara luas di Tiongkok, dengan ekosistem Alibaba yang kaya serta dukungan komunitas.
Kafka: Kafka memiliki komunitas sumber terbuka yang aktif dan ekosistem yang luas, serta digunakan secara luas oleh banyak perusahaan besar.
Bintang Github
Kontributor Github
Secara umum:rabbitmq<rocketmq<kafka
7、filosofi desain
RabbitMQ:RabbitMQ adalah middleware pesan sumber terbuka berbasis AMQP(Advanced Message Queuing Protocol), yang menekankan kemudahan penggunaan dan fleksibilitas, serta mendukung berbagai pola pesan dan pengiriman pesan yang andal.
RocketMQ: RocketMQ adalah middleware perpesanan terdistribusi sumber terbuka dari Alibaba, yang awalnya dirancang untuk memenuhi kebutuhan pengolahan data dalam jumlah besar di internal Alibaba. RocketMQ memiliki throughput tinggi dan latensi rendah. Pada tahun 2016, Alibaba menyumbangkan RocketMQ kepada Apache Software Foundation.
Kafka:Kafka adalah platform pemrosesan aliran terdistribusi yang dikembangkan oleh LinkedIn, terutama digunakan untuk pemrosesan aliran data waktu nyata dengan throughput tinggi, serta menyimpan dan memproses data secara persisten. Pada tahun 2011, Kafka menjadi proyek sumber terbuka Apache.
8、Model data
RabbitMQ: RabbitMQ menggunakan model antrean (Queue), pesan dikirim ke antrean, lalu konsumen menerima pesan dari antrean dan memprosesnya.
RocketMQ:RocketMQ menggunakan model topik(Topic)dan tag(Tag). Pesan diterbitkan ke topik, dan konsumen dapat berlangganan serta memfilter pesan berdasarkan topik dan tag.
Kafka:Kafka menggunakan model publikasi-langganan. Pesan dipublikasikan ke topik, dan beberapa konsumen dapat berlangganan topik yang sama serta mengonsumsi pesan secara mandiri。
9、Alat pengelolaan Web
RabbitMQ
Antarmuka pengelolaan Web RabbitMQ:RabbitMQ dilengkapi antarmuka pengelolaan Web yang dapat diakses melalui peramban. Antarmuka penggunanya intuitif dan memungkinkan Anda melihat serta mengelola berbagai aspek server RabbitMQ, termasuk antrean, exchange, binding, izin pengguna, dan lainnya. Secara bawaan, antarmuka pengelolaan Web berjalan pada port 15672。
RokcetMQ
RocketMQ Console: RocketMQ secara resmi menyediakan konsol Web bernama RocketMQ Console. Konsol ini menyediakan antarmuka visual untuk mengelola dan memantau berbagai aspek klaster RocketMQ, termasuk Topic, grup konsumen, pencarian pesan, statistik kinerja, dan lainnya. Anda dapat menggunakan alat ini dengan mengakses URL konsol.
Kafka
Kafka Manager:Kafka Manager adalah alat pengelolaan grafis sumber terbuka yang dikembangkan Yahoo untuk mengelola klaster Apache Kafka. Alat ini menyediakan pemantauan status klaster secara waktu nyata, pengelolaan topik dan partisi, pengelolaan grup konsumen, serta fungsi lainnya.
10、Pola pesan
Model transmisi middleware pesan yang umum digunakan terutama berupa model titik ke titik dan model publikasi-langganan. Secara lebih rinci:
RabbitMQ:
Pola publikasi-langganan:RabbitMQ mendukung pola publikasi-langganan, di mana produsen memublikasikan pesan ke Exchange, kemudian Exchange meneruskan pesan ke beberapa antrean yang terikat(Binding)padanya. Konsumen dapat menerima pesan dari antrean secara independen.
Pola titik ke titik: RabbitMQ juga mendukung pola titik ke titik, yaitu produsen mengirim pesan ke antrean tertentu, lalu konsumen menerima pesan dari antrean tersebut. Setiap pesan hanya dapat diterima dan diproses oleh satu konsumen.
2.RocketMQ:
Pola publikasi-langganan:RocketMQ mendukung pola publikasi-langganan, di mana produsen mengirim pesan ke topik(Topic)yang ditentukan, lalu konsumen berlangganan topik yang diminati. Pola langganan RocketMQ mendukung berbagai cara berlangganan, seperti mode siaran dan mode klaster, sehingga memungkinkan multicast pesan atau konsumsi dengan penyeimbangan beban.
Mode antrean:RocketMQ juga mendukung mode antrean, di mana produsen mengirim pesan ke antrean yang ditentukan, lalu konsumen menerima pesan dari antrean tersebut. Beberapa konsumen dapat mengonsumsi pesan dari antrean yang sama secara paralel.
3.Kafka:
Pola publikasi-langganan:Kafka menggunakan pola publikasi-langganan, di mana produsen menerbitkan pesan ke topik(Topic)yang ditentukan, lalu konsumen berlangganan topik yang diminati. Pola langganan Kafka mendukung beberapa grup konsumen, dan setiap grup konsumen dapat mengonsumsi pesan secara mandiri, sehingga memungkinkan throughput tinggi dan penskalaan horizontal.
Pola partisi:Kafka membagi topik menjadi beberapa partisi, dan setiap partisi secara fisik bersesuaian dengan sebuah berkas log tersendiri. Produsen mengirim pesan ke partisi yang ditentukan, sementara konsumen dapat mengonsumsi pesan secara paralel berdasarkan partisi. Pola partisi ini memungkinkan Kafka melakukan penskalaan horizontal dan mencapai kapasitas pemrosesan tinggi.