Bu açık kaynak MQTT broker karşılaştırması, yaygın olarak kullanılan dört projeyi, yani Eclipse Mosquitto, EMQX, VerneMQ ve NanoMQ'yu, onları çalıştırmak zorunda olan birinin gözünden inceliyor. Her broker'ın neyde iyi olduğunu, size operasyonel efor olarak neye mal olduğunu ve her birini birkaç dakikada yerel olarak nasıl ayağa kaldıracağınızı öğreneceksiniz. Sonunda projenize hangisinin uyduğunu ya da operasyonu yönetilen bir hizmete devretmenin daha iyi bir takas olup olmadığını bileceksiniz.
Açık Kaynak MQTT Broker'ları Neden Karşılaştırmalı?
Her MQTT dağıtımının bir broker'a ihtiyacı vardır: bağlantıları kabul eden, istemcileri doğrulayan ve yayınlanan her mesajı eşleşen tüm abonelere yönlendiren sunucu. Bu rolü hatırlamak isterseniz bir MQTT broker'ın ne yaptığını okuyun. Protokol standarttır; dolayısıyla uyumlu herhangi bir client uyumlu herhangi bir broker ile konuşabilir. Broker'lar arasında farklı olan, protokolün etrafındaki her şeydir: nasıl ölçeklendikleri, oturumları nasıl sakladıkları, kimlik doğrulamayı nasıl yapılandırdığınız, güncellemeler sırasında nasıl davrandıkları ve zamanınızın ne kadarını aldıkları.
Aşağıdaki dört projenin tamamı olgundur, bir yerlerde canlı ortamda aktif olarak kullanılır ve MQTT 3.1.1 ile MQTT 5.0'ı uygular. Hiçbiri soyut anlamda "en iyisi" değildir. Doğru seçim; bağlantı sayısına, kümelemeye ihtiyaç duyup duymadığınıza, ekibinizin zaten neyi bildiğine ve kuruluşunuzun kabul ettiği lisans koşullarına bağlıdır.
Bir Bakışta Dört Broker
Eclipse Mosquitto
Mosquitto, çoğu kişinin başladığı referans noktasıdır. C ile yazılmıştır, Eclipse Foundation bünyesinde sürdürülür ve birkaç megabayt bellekle bir Raspberry Pi'da veya bir konteynerde çalışacak kadar küçüktür. Yapılandırma tek bir metin dosyasıdır; kimlik doğrulama bir parola dosyası veya dynamic security eklentisiyle yapılır, köprüleme (bridging) ise bir Mosquitto örneğinin topic'leri başka bir broker'a iletmesini sağlar.
Temel mimari sınır, Mosquitto'nun tek düğüm olarak çalışmasıdır. Yerleşik kümeleme yoktur; bu nedenle yüksek erişilebilirlik, harici bir yük devretme düzeni ve oturum durumu için bir plan gerektirir. Tek bir saha, bir laboratuvar, bir edge ağ geçidi veya iyi boyutlandırılmış tek bir sunucuda birkaç bin cihaz için bu çoğu zaman tamamen yeterlidir.
EMQX
EMQX, Erlang/OTP üzerine kurulmuştur ve en baştan kümeleme etrafında tasarlanmıştır. Birden çok düğüm tek bir mantıksal broker oluşturur; bu da çok büyük bağlantı sayılarını makinelere dağıtmasına olanak tanır. Bir web panosu, zengin bir kimlik doğrulama ve yetkilendirme sistemi ve özellik setinde yerleşik bir kural motoru ile veri entegrasyonlarıyla gelir. Küme dağıtımları için bir Kubernetes operatörü mevcuttur.
Lisanslama dikkat gerektirir: EMQX, sürümler boyunca lisans modelini değiştirmiştir ve en son sürümlerin koşulları eski açık kaynak sürümlerden farklıdır. Standart olarak benimsemeden önce EMQX web sitesindeki güncel lisansı okuyun ve kullanımınıza uygun olduğunu doğrulayın.
VerneMQ
VerneMQ da Erlang üzerine kuruludur ve master'sız kümeleme, kimlik doğrulama ve yetkilendirme için eklenti kancaları ve topic alanlarını ayırmak için mountpoint gibi özellikler sunar. Kaynak kodu Apache 2.0 lisansı altında yayımlanır. Resmi hazır paketleri ve konteyner imajları ise kendi koşullarıyla gelir (Docker imajı, bir ortam değişkeni aracılığıyla bir EULA'yı kabul etmenizi ister); bu yüzden hangi dağıtımı kullandığınızı kontrol edin. Her projede olduğu gibi, bağlanmadan önce son sürüm etkinliğine ve topluluk destek kanallarına bakın.
NanoMQ
EMQ ekibinin geliştirdiği NanoMQ, NNG mesajlaşma kütüphanesi üzerinde C ile yazılmış hafif bir broker'dır. Edge cihazlarını ve ağ geçitlerini hedefler: küçük ayak izi, mütevazı donanımda çok iş parçacıklı performans ve üst seviye bir broker'a köprüleme. Seçili topic'leri merkezi veya bulut broker'a ileten, endüstriyel bir PC'de ya da ağ geçidinde yerel bir broker istediğinizde doğal bir seçimdir.
Özellik ve Operasyon Karşılaştırma Tablosu
Tablo, mimariyi ve tipik operasyonel özellikleri özetler. Özellikler sürümler arasında değiştiği için ayrıntıları her zaman projelerin güncel belgeleriyle doğrulayın.
| Özellik | Mosquitto | EMQX | VerneMQ | NanoMQ |
|---|---|---|---|---|
| Dil | C | Erlang/OTP | Erlang/OTP | C (NNG) |
| MQTT sürümleri | 3.1, 3.1.1, 5.0 | 3.1, 3.1.1, 5.0 | 3.1, 3.1.1, 5.0 | 3.1.1, 5.0 |
| Yerel kümeleme | Hayır (tek düğüm) | Evet | Evet (master'sız) | Hayır (edge odaklı) |
| Tipik ayak izi | Çok küçük | Daha büyük, yatay ölçeklenir | Orta, yatay ölçeklenir | Çok küçük |
| Yönetim arayüzü | Yerleşik yok | Yerleşik pano | CLI ve HTTP API | HTTP API |
| Kimlik doğrulama seçenekleri | Parola dosyası, eklentiler | Yerleşik ve harici arka uçlar | Eklentiler ve kancalar | Yapılandırma ve HTTP auth |
| En uygun kullanım | Tek saha, edge, laboratuvar | Büyük kümeler | Kümelenmiş dağıtımlar | Ağ geçitleri ve edge köprüleme |
| Operasyon eforu | Düşük ile orta | Orta ile yüksek | Orta ile yüksek | Düşük |
İki gözlem öne çıkıyor. Birincisi, tek düğümlü broker'ları çalıştırmak daha basittir ama erişilebilirliği kendiniz çözmeye zorlar. İkincisi, kümelenmiş broker'lar erişilebilirlik ve ölçek sorununu çözer ancak hareketli parçalar ekler: düğüm keşfi, ağ bölünmeleri, kademeli güncellemeler ve kümeye duyarlı izleme.
Her Broker'ı Docker ile Yerel Olarak Deneyin
Fikir edinmenin en hızlı yolu, her broker'ı çalıştırıp bir client bağlamaktır. Aşağıdaki komutlar yalnızca yerel test içindir ve anonim erişim açıktır. Bu kurulumları internete açmayın.
# Mosquitto 2.x needs an explicit listener to accept non-localhost connections
mkdir -p mosquitto/config
cat > mosquitto/config/mosquitto.conf <<'EOF'
listener 1883
allow_anonymous true
EOF
docker run -d --name mosquitto -p 1883:1883 \
-v "$PWD/mosquitto/config:/mosquitto/config" eclipse-mosquitto:2
# EMQX (dashboard on http://localhost:18083)
docker run -d --name emqx -p 1884:1883 -p 18083:18083 emqx/emqx:latest
# VerneMQ (accept the image EULA and allow anonymous for a local test)
docker run -d --name vernemq -p 1885:1883 \
-e DOCKER_VERNEMQ_ACCEPT_EULA=yes \
-e DOCKER_VERNEMQ_ALLOW_ANONYMOUS=on vernemq/vernemq
# NanoMQ
docker run -d --name nanomq -p 1886:1883 emqx/nanomq:latest
Ardından her porta karşı aynı publish ve subscribe testini çalıştırın:
for port in 1883 1884 1885 1886; do
mosquitto_sub -h localhost -p $port -i sub-$port -t 'test/compare' -C 1 -W 5 &
sleep 1
mosquitto_pub -h localhost -p $port -i pub-$port -t 'test/compare' -m "hello from $port"
wait
done
Her abone bir mesaj yazdırıp çıkmalıdır. Bu çalıştığında asıl ilginç kısım başlar: kimlik doğrulamayı etkinleştirin, TLS ekleyin, bir client kalıcı oturum tutarken konteyneri yeniden başlatın ve neyin ayakta kaldığını görün. Bu alıştırma, ikinci gün operasyonları hakkında herhangi bir özellik listesinden daha fazlasını anlatır.
Özellik Listesinin Size Söylemedikleri
TLS ve Sertifikalar
Her broker TLS'i destekler; ancak birinin sertifikaları edinmesi, süreleri dolmadan yenilemesi ve broker'ı her cihazı düşürmeden yeniden yüklemesi gerekir. Bunu ACME araçlarıyla otomatikleştirmek oldukça mümkündür ve aynı zamanda bir yenileme işi sessizce başarısız olduğunda klasik bir kesinti kaynağıdır.
Güncellemeler ve Uzun Ömürlü Bağlantılar
MQTT bağlantıları günler veya aylar boyunca açık kalır. Tek düğümlü bir broker'ı yeniden başlatmak tüm istemcilerin bağlantısını aynı anda keser ve hepsi aynı anda yeniden bağlanır. Kümelenmiş broker'lar güncellemeleri düğüm düğüm yapabilir, ancak yeniden başlayan düğümdeki istemciler yine de yeniden bağlanır. Hangi broker'ı seçerseniz seçin, cihaz tarafında rastgeleleştirilmiş yeniden bağlanma geri çekilmesi (backoff) planlayın.
İzleme ve Kapasite
Bağlantı sayılarını, mesaj hızlarını, düşürülen mesajları, belleği ve dosya tanımlayıcılarını izlemeniz gerekir. Mosquitto istatistikleri $SYS/ topic'leri altında yayınlar; kümelenmiş broker'lar ise HTTP API'leri ve metrik uç noktaları sunar. Her iki durumda da panoları ve uyarı kurallarını kendiniz oluşturursunuz. MQTT broker izleme rehberimiz takip edilmeye değer metrikleri listeler.
Güvenlik Operasyonları
Açık MQTT portları tarayıcıları hızla çeker. Sıkılaştırma; anonim erişimi kapatmak, başarısız oturum açma denemelerini hız sınırına tabi tutmak, broker'ı ve temel imajı yamalı tutmak ve her güncellemeden sonra yapılandırmayı gözden geçirmek anlamına gelir. MQTT güvenliği en iyi uygulamaları yazısı bu tablonun client tarafını ele alır.
Aralarında Nasıl Seçim Yapılır?
Bu soruları bir karar yolu olarak kullanın:
- İki yıl içinde kaç eşzamanlı bağlantı bekliyorsunuz? İyi donatılmış tek bir sunucu bunu rahatça karşılıyorsa Mosquitto hayatı basit tutar. Karşılamıyorsa kümelenmiş seçeneklere bakın.
- Broker'a edge'de ihtiyacınız var mı? Ağ geçitleri ve endüstriyel PC'ler için Mosquitto veya NanoMQ doğal seçimlerdir; genellikle merkezi bir broker'a köprülenirler.
- Yüksek erişilebilirlik kesin bir gereksinim mi? O zaman ya kümelenmiş bir broker çalıştırın ya da tek düğümlü bir broker için kalıcı oturumlara ne olacağı dahil harici yük devretme tasarlayın.
- Kuruluşunuz hangi lisans koşullarını kabul edebilir? Dağıtacağınız tam sürüm ve dağıtımın güncel lisansını okuyun.
- Nöbeti kim tutacak? Broker bir altyapıdır. Ekipte yamalardan, sertifikalardan ve gece 3'teki çağrılardan sorumlu olmak isteyen kimse yoksa bunu şimdiden hesaba katın.
Beşinci soru sizi duraksatıyorsa, karar vermeden önce eforu bir kendi sunucunuzda vs yönetilen MQTT broker analiziyle karşılaştırın.
Yönetilen Bir Hizmet Ne Zaman Daha Mantıklıdır?
Açık kaynak broker'lar mükemmel yazılımlardır. Onları çalıştırmanın maliyeti çoğunlukla insanların zamanıdır: TLS kurmak, izleme oluşturmak, güncellemeleri yönetmek, limitleri ayarlamak ve olaylara müdahale etmek. Pek çok IoT ekibi için bu zaman cihazlara ve uygulamalara harcanırsa daha verimli olur.
Yönetilen bir MQTT broker bu görevleri sağlayıcıya devreder. ConnectMQ ile portalda bir broker oluşturur ve bir kullanıcı adı, parola ve client ID alırsınız. Uç noktalar Let's Encrypt sertifikasıyla TCP 1883, TLS 8883, WebSocket 8083 ve Secure WebSocket 8084 (yol /mqtt) üzerinde hazırdır; MQTT 3.1.1 ve MQTT 5.0 client'ları değişiklik olmadan çalışır. MQTT bir standart olduğundan, Mosquitto veya EMQX'e karşı test ettiğiniz client kodu yalnızca host, port ve kimlik bilgileri değiştirilerek ConnectMQ'ya bağlanır.
ConnectMQ ayrıca normalde kendiniz bir araya getireceğiniz araçları ekler: tarayıcı içi MQTT client, canlı topic gezgini, pano, ISA-95 seviyelerine göre düzenlenmiş cihaz görünümü ve uyarı kaydıyla birlikte eşik tabanlı uyarı kuralları. Planlar, paylaşımlı bir kümedeki ücretsiz Serverless katmanından Dedicated izole kümelere ve kendi bulut hesabınızdaki BYOC'ye kadar uzanır; böylece barındırma modeli gereksinimlerinizi takip edebilir. Bulut MQTT broker rehberi bu modellerin nasıl karşılaştırıldığını açıklar.
Mantıklı bir desen hibrit yaklaşımdır: yerel dayanıklılık için Mosquitto'yu veya NanoMQ'yu edge'de tutun ve seçili topic'leri bulut uygulamalarınızın ve panolarınızın kullandığı barındırılan bir broker'a köprüleyin.
Dakikalar İçinde Barındırılan Bir Broker'a Karşı Test Edin
Seçim yapmadan önce mevcut client'ınızı barındırılan bir broker'a yönlendirin ve deneyimi yerel konteynerlerinizle karşılaştırın. broker.connectmq.com adresindeki ücretsiz herkese açık MQTT broker hesap gerektirmez; benzersiz bir client ID ve topic öneki kullanın ve herkese açık topic'lerin herkes tarafından okunabildiğini unutmayın.
mosquitto_sub -h broker.connectmq.com -p 1883 -i cmp-sub-7f3a \
-t 'connectmq/demo/7f3a/compare' -v &
mosquitto_pub -h broker.connectmq.com -p 1883 -i cmp-pub-7f3a \
-t 'connectmq/demo/7f3a/compare' -m 'hello from the comparison test'
Canlı ortam verileri için özel bir broker oluşturun ve kendi kimlik bilgilerinizle 8883 portu üzerinden TLS ile bağlanın.
ConnectMQ ile Başlayın
Zamanınızı broker operasyonları yerine cihazlara ve uygulamalara harcamayı tercih ediyorsanız app.connectmq.com adresinde ücretsiz bir Serverless broker oluşturun. Kredi kartı gerekmez ve MQTT client kodunuzu değiştirmeden daha sonra Dedicated veya BYOC'ye geçebilirsiniz.
Sık Sorulan Sorular
Yeni başlayanlar için en iyi açık kaynak MQTT broker hangisi?
Mosquitto genellikle başlamak için en kolay yerdir. Dakikalar içinde kurulur, okunabilir tek bir yapılandırma dosyası kullanır ve sayısız eğitimde belgelenmiştir.
Mosquitto kümelenebilir mi?
Yerel olarak hayır. Mosquitto tek düğüm olarak çalışır; örnekleri köprüleyebilir veya harici yük devretme kurabilirsiniz, ancak gerçek bir çok düğümlü küme için kümeleme amacıyla tasarlanmış bir broker'a bakmanız gerekir.
EMQX hâlâ açık kaynak mı?
EMQX lisanslaması sürümler boyunca değişti; dolayısıyla yanıt dağıttığınız sürüme bağlıdır. Kullanmayı planladığınız tam sürümle yayımlanan lisansı kontrol edin.
Daha sonra açık kaynak bir broker'dan yönetilen bir broker'a geçebilir miyim?
Evet. MQTT bir standart olduğundan client'lar genellikle yalnızca yeni bir host, port ve kimlik bilgilerine ihtiyaç duyar. Kural motorları veya eklentiler gibi güvendiğiniz broker'a özgü özellikleri gözden geçirin; çünkü bunlar otomatik olarak taşınmaz.



