Message broker: satu model mental
Kafka, NSQ, NATS, RabbitMQ, AWS — lima message brokerⓘ, dan tiap kali Anda pindah dari satu ke yang lain, rasanya seperti mulai dari nol. Namanya berganti, dokumentasinya tebal, dan ide yang sama muncul dengan sebutan berbeda di tiap sistem.
Padahal di lapisan yang benar-benar penting, kelimanya menjalankan satu ide yang sama. Begitu Anda melihat modelnya, kelima broker itu berhenti terasa seperti lima hal berbeda.
Satu model
Sebuah producer mem-publish pesan ke sebuah topicⓘ. Tiap consumer groupⓘ yang berlangganan mendapat salinannya sendiri — inilah lapisan fan-outⓘ. Di dalam satu group, beberapa worker berbagi salinan itu secara round-robin, tiap pesan diproses satu kali.
Dua lapisan itulah intinya: fan-out ke group (siapa yang dapat salinan) versus pembagian antar-worker (siapa yang memprosesnya). Kafka menyebut group-nya consumer group, NSQ menyebutnya channel, RabbitMQ memakai queue, AWS memakai SQS queue — nama beda, ide sama.
Di mana mereka benar-benar berbeda
Perbedaannya ada di detail, bukan di modelnya. Kafka membatasi jumlah worker per group ke jumlah partitionⓘ-nya — sisanya menganggur; NSQ, NATS, dan RabbitMQ tidak. Sebagian mendorong pesan ke consumer (push), sebagian menunggu consumer menariknya (pull). Sebagian bisa memutar ulang riwayat (replay), sebagian tidak. RabbitMQ menambahkan exchange untuk memilih queue mana yang cocok.
Lihat langsung bergerak
Teori paling cepat masuk saat Anda bisa menggerakkannya. Di panduan interaktifnya, tambahkan consumer ke sebuah group Kafka melewati 4 partition-nya — yang kelima langsung menganggur. Ganti ke NSQ dengan jumlah yang sama — semuanya tetap bekerja, bebannya terbagi rata. Satu tombol, dua perilaku berlawanan — itulah seluruh pelajaran partition dalam sekali klik.
Sources