Neredeyse her MQTT projesi public bir broker’da başlar. Bir eğitimden broker.hivemq.com ya da broker.emqx.io adresini kopyalarsınız, kimlik bilgisi olmadan bağlanırsınız ve mesajlar saniyeler içinde akmaya başlar. Public broker’ların var olma nedeni tam olarak bu hızdır. Ancak onları kolay kılan aynı açıklık, deneylerin ötesindeki her şey için onları uygunsuz kılar. Bu rehber, ne zaman kalmanız ve ne zaman geçmeniz gerektiğini bilmeniz için artıları ve eksileri dürüstçe ortaya koyuyor.
Public bir MQTT broker’ı aslında nedir
Public broker, internetteki herkesten anonim bağlantı kabul eden paylaşımlı bir MQTT sunucusudur. Üreticiler ve açık kaynak projeleri bunları demo ve birlikte çalışabilirlik (interoperability) sandbox’ı olarak işletir. Public broker listemiz popüler olanları kapsıyor. Belirleyici özellikleri şunlardır:
- Kayıt gerekmez ve genellikle kullanıcı adı veya parola yoktur.
- Dünyadaki tüm kullanıcılar için tek bir ortak topic ad alanı (namespace) vardır.
- Desteklenen bir servis değil, test amaçlı “elden gelenin en iyisi” (best-effort) düzeyinde işletilir.
Public sandbox’ların gerçek riskleri
1. Topic’lerinizi herkes okuyabilir ve yazabilir
Kimlik doğrulama ve erişim kontrolü olmadığından, # topic’ine abone olan biri broker’daki her mesajı alır — sizinkiler dahil. Herkes komut topic’lerinize de yayın yapabilir. Bir cihaz home/garage/door/set topic’ini dinliyorsa, bir yabancı kapıyı açabilir. Tahmin edilmesi zor topic adları çakışmaları azaltır ama güvenlik sağlamaz: # topic’ine abone olan herkes onları görür.
2. Retained çöpler ve bayat durum bilgisi
Retained mesajlar biri onları temizleyene kadar kalır. Public bir broker’da topic’ler diğer kullanıcılardan ve eski testlerden kalan retained payload’larla doludur ve herkes sizin retained durumunuzun üzerine yazabilir. Abonelik sırasında gelen retained değere güvenen bir dashboard, hiç size ait olmamış verileri gösterebilir. Retention’ın nasıl çalıştığı için MQTT retained mesajlar yazısına bakın.
3. Topic ve client ID çakışmaları
test/temperature gibi genel topic’ler, aynı eğitimi takip eden herkesle paylaşılır. Genel client ID’ler daha da kötüdür: başka biri sizin ID’nizle bağlandığında broker sizin bağlantınızı keser ve her iki client da bir yeniden bağlanma döngüsüne girer. Ayrıntılar MQTT bağlantı hataları yazısında.
4. SLA yok, destek yok, önceden haber yok
Public broker’lar herhangi bir anda yeniden başlatılabilir, güncellenebilir veya hız sınırına tabi tutulabilir. Bazıları bilerek geliştirme sürümleri çalıştırır. Bir sandbox için bu sorun değildir, ancak bir demonun bir müşterinin önünde, sizin göremeyeceğiniz ya da düzeltemeyeceğiniz nedenlerle başarısız olabileceği anlamına gelir.
5. Hız sınırları ve eksik özellikler
İşletmeciler paylaşımlı altyapıyı bağlantı, mesaj hızı ve payload sınırlarıyla korur; bu sınırlar belgelenmemiş olabilir. Ayrıca production’ın dayandığı özellikleri test edemezsiniz: kimlik doğrulama, topic bazında yetkiler, client sertifikaları, bridging veya kalıcılık (persistence) ayarları.
Public bir broker’ın tamamen yeterli olduğu durumlar
- QoS, wildcard’lar ve Last Will gibi MQTT kavramlarını öğrenmek.
- Yeni bir client kütüphanesinin veya cihaz firmware’inin bağlanıp yayın yapabildiğini kontrol etmek.
- Sahte verilerle ve rastgele bir topic önekiyle hızlı demolar yapmak.
- Bir hatayı tarafsız, iyi bilinen bir broker üzerinde yeniden üretmek.
Eğer kullanıyorsanız, birkaç alışkanlık edinin:
# Random prefix + random client ID = fewer collisions
PREFIX="testmqtt/$(openssl rand -hex 4)"
mosquitto_sub -h broker.emqx.io -i "sub-$(openssl rand -hex 4)" -t "$PREFIX/#" -vPublic bir broker’ı güvenle deneyin
Geçiş zamanının geldiğini gösteren işaretler
- Mesajlarınız herkese açık paylaşmayacağınız herhangi bir şey içeriyor.
- Cihazlar MQTT üzerinden komut kabul ediyor.
- Sizden başka biri buna bağımlı — bir ekip arkadaşı, bir pilot müşteri, bir demo.
- Kimlik doğrulamayı, ACL’leri veya TLS client sertifikalarını test etmeniz gerekiyor.
- Açıklanamayan bağlantı kopmaları, hız kısıtlamaları veya yabancı mesajlarla karşılaştınız.
Özel (private) bir broker için seçenekleriniz
| Seçenek | Sizin yönettikleriniz | Ne zaman uygun |
|---|---|---|
| Self-hosted Mosquitto | Sunucu, TLS, kullanıcılar, güncellemeler, izleme | Küçük kurulumlar ve Linux operasyonlarında rahat olan ekipler |
| Self-hosted EMQX veya HiveMQ Community Edition | Yukarıdakilerin aynısı, artı cluster yapılandırması | Clustering’e veya broker eklentilerine ihtiyacınız var ve operasyon kapasiteniz yeterli |
| Yönetilen (managed) broker (örneğin ConnectMQ) | Yalnızca kullanıcılar, topic’ler ve client’lar | Altyapı işletmeden özel ve güvenli bir broker istiyorsunuz |
Self-hosting sağlam bir seçimdir ve tam kontrol sağlar; bedeli ise süregelen iştir — sertifika yenilemeleri, işletim sistemi yamaları, yedeklemeler ve alarm yönetimi. Yönetilen bir broker, bu işleri yapmak zorunda kalmamanız karşılığında kontrolün bir kısmından vazgeçmenizi gerektirir.
Mantıklı bir yol: öğrenmek için public, geri kalan her şey için private
Bir kez ve sonsuza dek seçim yapmak zorunda değilsiniz. Pek çok ekip ilk öğleden sonrası için public bir sandbox kullanır — bir kütüphanenin çalıştığını ve topic tasarımının mantıklı olduğunu doğrulamak için — ve gerçek cihazlar veya ekip arkadaşları devreye girer girmez özel bir broker’a geçer. Bu noktadan itibaren development, staging ve production’ın her biri kendi broker’ına ya da kendi kimlik bilgilerine sahip olur; böylece bir test script’i asla yanlışlıkla production topic’lerine yayın yapamaz.
Bağlantı bilgilerini (URL, kullanıcı adı, parola) ilk günden itibaren yapılandırmada veya ortam değişkenlerinde tutun. Böylece broker değiştirmek bir kod değişikliği değil, bir dağıtım (deployment) değişikliği olur ve aynı build’i bir demo için public bir broker’a, bir pilot için de özel bir broker’a yönlendirebilirsiniz.
Özel veya yönetilen bir broker’da nelere bakmalısınız
- İzolasyon: paylaşımlı bir topic ağacı değil, size ait bir instance veya namespace.
- Kimlik doğrulama: en azından client başına kullanıcı adı/parola; ideal olarak cihaz başına kimlik bilgileri.
- Yetkilendirme: bir sensörün yalnızca kendi topic’lerine yayın yapabilmesi için topic bazında erişim kontrolü.
- Şifreleme:
8883üzerinde TLS ve tarayıcı uygulamaları için güvenli WebSocket. MQTT port’ları yazısına bakın. - Protokol desteği: eski cihazlar ile yeni özelliklerin bir arada var olabilmesi için MQTT 3.1.1 ve MQTT 5.
- Standart uç noktalar: düz host ve port; böylece ileride geçiş yapmak yalnızca yapılandırma değişikliği anlamına gelir.
- Görünürlük: bağlı client’ları ve bir bağlantının neden reddedildiğini görebilmenin bir yolu.
Geçiş çoğunlukla bir yapılandırma işidir
MQTT standart bir protokol olduğu için public bir broker’dan özel bir broker’a geçmek uygulama mantığına nadiren dokunur:
// Before: public sandbox
mqtt.connect('wss://broker.emqx.io:8084/mqtt');
// After: private broker with credentials over TLS
mqtt.connect(process.env.MQTT_URL, {
username: process.env.MQTT_USERNAME,
password: process.env.MQTT_PASSWORD,
clientId: `sensor-${deviceSerial}`,
});Bu geçişi topic hiyerarşinizi düzenlemek için de bir fırsat olarak görün — tutarlı bir yapı, erişim kurallarını yazmayı çok daha kolay hale getirir. MQTT topic’leri ve wildcard’lar yazısı ölçeklenen adlandırma kalıplarını ele alıyor; filtrelerinizi de topic eşleştirici ile kontrol edebilirsiniz.
Sıkça sorulan sorular
Public bir MQTT broker kullanmak güvenli mi?
Öğrenme ve sahte verilerle hızlı testler için güvenlidir. Gizli olan hiçbir şey için güvenli değildir: public broker’larda kimlik doğrulama yoktur, bu yüzden topic’inizi tahmin eden ya da wildcard ile abone olan herkes onu okuyabilir ve ona yayın yapabilir.
Public bir MQTT broker’ı production’da kullanabilir miyim?
Hayır. Public sandbox’lar test için işletilir, herhangi bir hizmet seviyesi sözleşmesi (SLA) sunmaz, her an hız sınırı uygulayabilir veya yeniden başlatılabilir ve erişim kontrolü sağlamaz. Production sistemleri, sizin ya da bir sağlayıcının kontrol ettiği bir broker’a ihtiyaç duyar.
Özel (private) ve yönetilen (managed) MQTT broker arasındaki fark nedir?
Özel broker, yalnızca sizin client’larınızın kullanabildiği her türlü broker’dır. Bunu kendiniz barındırabilir (Mosquitto, EMQX, HiveMQ CE) ya da altyapıyı sağlayıcının işlettiği ve size kimlik bilgileriyle izole bir instance verdiği yönetilen bir servis kullanabilirsiniz.