Yönetilen MQTT Bulutu

Açık Kaynak MQTT Broker Karşılaştırması: Mosquitto, EMQX, VerneMQ ve NanoMQ

Mosquitto, EMQX, VerneMQ ve NanoMQ'yu kapsayan adil ve pratik bir açık kaynak MQTT broker karşılaştırması; her birini denemek için Docker komutları ve yönetilen bir hizmetin ne zaman daha mantıklı olduğuna dair rehberlik.

Cihazlar ve kümeleme şemalarıyla yan yana dört broker logosunu gösteren açık kaynak MQTT broker karşılaştırması illüstrasyonu
Bunu kendi MQTT broker’ınızda çalıştırınFree planla özel, yönetilen bir MQTT broker alın ve hazır kod örnekleriyle başlayın.
Ücretsiz deneyin Kod örnekleri Kart gerekmez

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:

  1. İ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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.

İlgili yazılar

BYOC MQTT Broker: Kendi Bulutunuzu Getirin Modeli Açıklandı

BYOC MQTT broker sizin bulut hesabınızda çalışır ama bir sağlayıcı tarafından işletilir. Modelin nasıl işlediğini, sorumluluk paylaşımını ve hesabınızı buna nasıl hazırlayacağınızı öğrenin.

7 dk okuma

Google Cloud IoT Core Alternatifi: Kapanış Sonrası Seçenekler ve Geçiş

Google, Cloud IoT Core'u Ağustos 2023'te kullanımdan kaldırdı. Bu rehber gerçekçi alternatifleri karşılaştırıyor, IoT Core kavramlarını standart MQTT'ye eşliyor ve verileriniz Google Cloud'a akmaya devam ederken cihazlarınızı yönetilen bir broker'a nasıl taşıyacağınızı gösteriyor.

7 dk okuma

Saniyede MQTT Mesaj Sayısı: Verim Nasıl Tahmin Edilir ve Ölçülür

MQTT verim planlaması birkaç formüle ve tek bir dürüst ölçüme dayanır. Saniyedeki gelen ve giden mesaj sayısını nasıl tahmin edeceğinizi, tepe değerleri nasıl hesaba katacağınızı ve sonucu bir broker planına nasıl eşleyeceğinizi öğrenin.

6 dk okuma

Tüm yazılar →

Özel MQTT broker’ınız birkaç tık uzağınızda

Hesabınızı oluşturun, broker kimlik bilgilerinizi alın ve ilk cihazınızı bağlayın — kurulacak, yamalanacak ya da ölçeklendirilecek sunucu yok.