Bir bulut MQTT broker, cihazlarınıza, uygulamalarınıza ve servislerinize bir sunucu kurmanıza, yamamanıza veya ölçeklendirmenize gerek kalmadan güvenilir ve internetten erişilebilir bir mesaj merkezi sağlar. Bu rehber barındırılan bir broker'ın ne olduğunu, dağıtım modellerinin nasıl farklılaştığını, güvenlik, limitler ve maliyet açısından nelere bakmanız gerektiğini ve bir dizüstü bilgisayar prototipinden production'a nasıl geçeceğinizi açıklar. Sonunda özel bir broker'a çalışan bir bağlantınız ve sağlayıcı seçimi için bir kontrol listeniz olacak.
Bulut MQTT Broker Nedir?
MQTT broker, yayımlanan her mesajı alan ve eşleşen her aboneye yönlendiren sunucudur. Bu rolü hatırlamanız gerekiyorsa bir MQTT broker'ın ne yaptığı yazısıyla başlayın. Bulut MQTT broker, bir sağlayıcının işlettiği altyapıda çalışan ve public bir hostname üzerinden erişime açılan aynı yazılımdır. Siz uç noktaları, kimlik bilgilerini ve bir yönetim konsolunu alırsınız; sunucuları, işletim sistemlerini, TLS sertifikalarını, yükseltmeleri ve kapasiteyi sağlayıcı yönetir.
"Üzerinde Mosquitto olan bir VM"den farkı sorumluluktur. Buluttaki bir VM'de broker hâlâ sizindir: yapılandırma, sertifikalar, izleme, güvenlik yamaları ve gece üçteki kesinti. Barındırılan bir broker'da bunlar sağlayıcının işi hâline gelir ve siz MQTT'yi bir servis olarak tüketirsiniz. Bu model genellikle hizmet olarak MQTT broker olarak adlandırılır ve yeni IoT projelerinin çoğunun bir dolaptaki sunucu yerine bulutta başlamasının nedeni budur.
Ekipler MQTT'yi Neden Buluta Taşıyor?
- Erişilebilirlik. Sahadaki cihazlar, her sahada gelen trafik için güvenlik duvarı kuralı veya port yönlendirme gerekmeden, public internet üzerinden tek ve sabit bir hostname'e bağlanır.
- İlk mesaja kadar geçen süre. Bir broker oluşturmak, günlerce süren sunucu sıkılaştırması yerine dakikalar alır.
- Operasyonel yük. Sertifika yenilemeleri, işletim sistemi yamaları, broker yükseltmeleri ve kapasite planlaması ekibinizin işi olmaktan çıkar.
- Esnek büyüme. On test cihazından binlerce cihaza geçmek bir yeniden mimari değil, bir plan değişikliğidir.
- Yerleşik araçlar. İyi bir sağlayıcı, aksi hâlde kendinizin bir araya getireceği bir web client'ı, bir topic gezgini ve bağlantı görünürlüğü sunar.
Ödünleşimler de gerçektir: sağlayıcının erişilebilirliğine ve yol haritasına bağımlı olursunuz, veriler tesislerinizden çıkar ve plan kotaları dahilinde çalışırsınız. İki tarafı kendi barındırdığınız ve yönetilen MQTT broker karşılaştırması yazımızda tartıyoruz.
Bulut MQTT Broker Dağıtım Modelleri
"Bulut broker" birbirinden çok farklı birkaç mimariyi kapsar. Hangisini satın aldığınızı bilmek, herhangi bir özellik listesinden daha önemlidir.
| Model | Nerede çalışır | İzolasyon | En uygun olduğu alan |
|---|---|---|---|
| Serverless (paylaşımlı) | Sağlayıcının paylaşımlı kümesi | Mantıksal, tenant bazında | Prototipler, küçük filolar, girişimler, eğitim |
| Dedicated | Sağlayıcının bulutu, size ayrılmış küme | Tam, altyapı seviyesinde | Production filoları, öngörülebilir performans |
| BYOC (kendi bulutunu getir) | Sizin bulut hesabınız, sağlayıcı tarafından işletilir | Tam, hesabınızın içinde | Veri yerleşimi, mevcut bulut taahhütleri |
| Self Managed Enterprise | Sizin altyapınız, sizin tarafınızdan işletilir | Tam | İnternetten yalıtılmış sahalar, katı şirket içi kurallar |
Serverless
Serverless MQTT broker, paylaşımlı ve çok kiracılı (multi-tenant) bir küme üzerinde çalışır. Saniyeler içinde bir broker oluşturursunuz, küçük ölçekte hiç ya da çok az ödersiniz ve instance'ları hiç düşünmezsiniz. İyi sağlayıcılar, gürültülü bir tenant'ın diğerlerine zarar vermemesi için katı tenant izolasyonu, plan bazlı kotalar ve flood koruması uygular. Kısıtlar, planın belirlediği bağlantı, mesaj boyutu ve throughput limitleridir. Bu izolasyonun nasıl çalıştığı multi-tenant MQTT broker'lar yazısında ele alınıyor.
Dedicated
Dedicated MQTT broker size izole bir küme verir. CPU'nuzu, belleğinizi veya ağınızı başka kimse paylaşmaz; bu yüzden gecikme ve throughput daha öngörülebilirdir ve limitler paylaşımlı bir katmana göre değil, iş yükünüze göre boyutlandırılır.
BYOC
BYOC MQTT broker ile broker kendi bulut hesabınızın içinde çalışır; böylece veriler kontrol ettiğiniz altyapıda kalır ve harcamalar mevcut bulut anlaşmalarınıza sayılır, broker'ı ise yine sağlayıcı sizin için işletir. Bu, düzenlemeye tabi sektörler için çoğu zaman cevaptır; uyumluluk tarafı için MQTT veri yerleşimi yazısına bakın.
Self Managed Enterprise
İnternete çıkışı olmayan fabrikalar gibi bazı ortamlar hiçbir harici servisi kullanamaz. Self-managed sürüm, aynı broker yazılımını kendi donanımınızda, kendi ekibinizin işletimiyle çalıştırmanıza olanak tanır.
Barındırılan Bir MQTT Broker'da Güvenlik
Buluta geçmek broker'ınızı public internete koyar; bu yüzden güvenlik isteğe bağlı değildir. Önem sırasına göre temel unsurlar:
- Her bağlantıda TLS. TLS üzerinden MQTT için 8883'ü, Secure WebSocket için 8084'ü kullanın. Düz 1883 yalnızca hassas olmayan verilerle yapılan geçici testlerde kabul edilebilir.
- Cihaz veya servis başına benzersiz kimlik bilgileri. Paylaşılan parolalar, ele geçirilen tek bir cihazı ele geçirilmiş bir filoya dönüştürür.
- Client ID bağlama. Client ID'ler verilen kimlik bilgilerine bağlandığında, çalınan bir parola başka bir cihazın kimliğine bürünmek için kullanılamaz.
- Kaba kuvvet (brute-force) koruması. Broker, tekrarlanan başarısız oturum açma denemelerinden sonra IP adreslerini engellemelidir.
- Tenant izolasyonu. Paylaşımlı altyapıda bir müşterinin topic'lerinin diğerine görünmez olduğunu doğrulayın.
- Flood koruması ve kotalar. Bir publish döngüsüne takılmış hatalı bir client'ın broker'ı çökertmesine izin verilmemeli, hızı kısılmalıdır.
- Payload hijyeni. Topic adlarına asla gizli bilgi veya kişisel veri koymayın; topic dizeleri loglarda ve araçlarda görünür.
Cihazlarda sertifika sabitleme (pinning) ve kimlik bilgisi rotasyonu dahil tam liste MQTT güvenliği en iyi uygulamaları yazımızda.
Anlamanız Gereken Limitler ve Kotalar
Her barındırılan broker limitler uygular ve bunlar tasarımınızı çoğu kişinin beklediğinden daha fazla şekillendirir. Karar vermeden önce şu rakamları isteyin:
| Limit | Neden önemli |
|---|---|
| Maksimum eşzamanlı bağlantı | Her cihaz, gateway, dashboard sekmesi ve backend worker bir bağlantı kullanır |
| Maksimum mesaj boyutu | Firmware imajları ve kamera kareleri tipik IoT katmanlarına sığmaz |
| Maksimum QoS | Bazı ücretsiz katmanlar QoS'u 1 ile sınırlar; tam olarak bir kez teslimat QoS 2 gerektirir |
| Client başına mesaj hızı | Ani yük üreten yayıncıların hızı kısılır veya bağlantısı kesilir |
| Client başına abonelik ve topic derinliği | Geniş wildcard tasarımları bu sınırlara takılabilir |
| Oturum süre sonu | Çevrimdışı client'ların kuyruktaki mesajlarını ne kadar süre tuttuğu |
| MQTT 5 özellikleri | Paylaşımlı abonelikler, mesaj süre sonu ve topic alias'ları her yerde yoktur |
Bir client MQTT 5 broker'ında bir kotayı aştığında sessiz bir düşürme yerine bir reason code alır; dikkat edilmesi gereken kod 0x97'dir (Quota exceeded). MQTT broker bağlantı kotaları yazımız bunları nasıl boyutlandıracağınızı açıklar.
Bulut MQTT Fiyatlandırması Nasıl İşler?
Sağlayıcılar barındırılan MQTT'yi birkaç tanıdık yöntemle fiyatlandırır:
- Bağlantı sayısına göre; cihaz filolarında genellikle baskın faktör budur.
- Mesaj hacmine veya throughput'a göre; yüksek frekanslı telemetride önemlidir.
- Küme veya instance'a göre; dedicated dağıtımlarda tipiktir.
- Özellik katmanına göre; QoS 2, daha büyük mesajlar veya paylaşımlı abonelikler üst planlarda açılır.
Kâğıt üzerindeki en ucuz plan her zaman en ucuz sistem değildir. Operasyonlar için mühendislik zamanını, kesintilerin maliyetini ve sağlayıcı işe yaramazsa ayrılma çabasını hesaba katın. MQTT broker fiyatlandırması modelleri ayrıntılandırır, toplam sahip olma maliyeti ise yönetilen ve kendi barındırdığınız harcamaları zaman içinde karşılaştırır. Bağımlılık riski, sağlayıcı tescilli bir SDK olmadan standart MQTT konuştuğunda en düşüktür; bunu MQTT tedarikçi bağımlılığından kaçınma yazısında ele alıyoruz.
Buluttaki Bir MQTT Broker'a Bağlanma: Uygulamalı
Barındırılan MQTT'yi anlamanın en hızlı yolu onu kullanmaktır. Hesap gerektirmeyen, broker.connectmq.com adresindeki paylaşımlı public MQTT test broker'ı ile başlayın. Benzersiz bir client ID ve benzersiz bir topic öneki kullanın ve public alanın herkes tarafından okunabildiğini unutmayın:
# Terminal 1: abone ol
mosquitto_sub -h broker.connectmq.com -p 1883 -i cloud-sub-r4t7 \
-t "connectmq/demo/r4t7w2/#" -v
# Terminal 2: yayımla
mosquitto_pub -h broker.connectmq.com -p 1883 -i cloud-pub-r4t7 \
-t "connectmq/demo/r4t7w2/sensor1/temp" -m "22.4"
Özel bir broker için akış şöyledir:
- app.connectmq.com adresinde kaydolun ve bir plan seçin.
- Bir broker oluşturun.
- Portaldan üretilen kullanıcı adını, parolayı ve client ID'yi kopyalayın.
- 8883 portunda TLS üzerinden bağlanın (veya tarayıcılardan
/mqttyoluyla 8084 portunda WSS üzerinden).
mosquitto_sub -h broker.connectmq.com -p 8883 --capath /etc/ssl/certs \
-i YOUR_CLIENT_ID -u YOUR_USERNAME -P YOUR_PASSWORD \
-t "plant1/#" -v
Sertifika Let's Encrypt tarafından verilir; bu yüzden standart CA paketleri onu doğrular. macOS ve Windows'ta --capath yerine bir CA paket dosyasıyla --cafile kullanın.
Python ile Production Tarzı Bir Client
Bu paho-mqtt 2.x client'ı kimlik bilgileriyle bağlanır, varlığını retained bir durum mesajı ve bir Last Will ile duyurur ve MQTT 5 mesaj süre sonunu kullanır; böylece eskimiş okumalar çok sonra çevrimiçi olan abonelere teslim edilmez:
import json
import time
import paho.mqtt.client as mqtt
from paho.mqtt.packettypes import PacketTypes
from paho.mqtt.properties import Properties
BASE = "plant1/line1/sensor1"
def on_connect(client, userdata, flags, reason_code, properties):
if reason_code.is_failure:
print("Connect failed:", reason_code)
return
client.publish(f"{BASE}/status", "online", qos=1, retain=True)
client.subscribe(f"{BASE}/cmd", qos=1)
def on_message(client, userdata, msg):
print("Command:", msg.payload.decode())
client = mqtt.Client(
mqtt.CallbackAPIVersion.VERSION2,
client_id="YOUR_CLIENT_ID",
protocol=mqtt.MQTTv5,
)
client.username_pw_set("YOUR_USERNAME", "YOUR_PASSWORD")
client.will_set(f"{BASE}/status", "offline", qos=1, retain=True)
client.tls_set()
client.reconnect_delay_set(min_delay=1, max_delay=60)
client.on_connect = on_connect
client.on_message = on_message
client.connect("broker.connectmq.com", 8883, keepalive=30)
client.loop_start()
props = Properties(PacketTypes.PUBLISH)
props.MessageExpiryInterval = 60 # saniye
while True:
payload = json.dumps({"temp": 22.4, "ts": int(time.time())})
client.publish(f"{BASE}/telemetry", payload, qos=1, properties=props)
time.sleep(10)
ConnectMQ portalında bu mesajların canlı topic gezgininde gelişini izleyebilir, tarayıcı içi MQTT client'ından geri bir komut gönderebilir ve $SYS/broker/connection/{clientId}/state topic'ine abone olarak belirli bir client'ın bağlı olup olmadığını kontrol edebilirsiniz.
Bulut Broker'ı Yığınınızın Geri Kalanıyla Entegre Etmek
Broker mesajları yönlendirir; onları veritabanınızda saklamaz veya API'lerinizi çağırmaz. Temiz ve taşınabilir kalıp, entegrasyon araçlarını sıradan MQTT client'ları olarak bağlamaktır:
- Zaman serisi depolama: InfluxDB'ye yazan Telegraf MQTT consumer'ı veya PostgreSQL ya da TimescaleDB'ye yazan küçük bir Python abonesi.
- Akışlar ve otomasyon: Broker'ınızı TLS ile 8883 portunda gösteren bir
mqtt-brokeryapılandırma node'una sahip Node-RED. - Dashboard'lar: Veritabanının üzerinde Grafana veya WSS üzerinden MQTT.js kullanan bir tarayıcı uygulaması.
- Akıllı ev: Home Assistant'ın MQTT entegrasyonu.
Bunların her biri standart bir client olduğu için cihaz firmware'ine dokunmadan araçları değiştirebilir veya ekleyebilirsiniz. Yük dengeli backend tüketicileri için MQTT 5 paylaşımlı abonelikleri ($share/group/topic) mesajları birkaç worker arasında dağıtır; aşağıdaki plan tablosunda görüldüğü gibi bunlar genellikle ücretli katmanlara ayrılmıştır.
Bir Bulut MQTT Broker Sağlayıcısı Seçmek
Sağlayıcıları karşılaştırırken bu kontrol listesini kullanın. Bir IoT MQTT broker nasıl seçilir üzerine daha kapsamlı rehberimizi tamamlar.
- Tescilli bir SDK gerektirmeden, standart client'larla MQTT 3.1.1 ve 5.0'ı destekliyor.
- Herkesçe güvenilen bir sertifikayla TLS ve Secure WebSocket uç noktaları sunuyor.
- Bağlantılar, mesaj boyutu, QoS ve hız için net kotalar yayımlıyor.
- Ödeme yapmadan önce client'larınızı doğrulamanız için ücretsiz bir katman veya public test broker'ı sunuyor.
- Client kodunu değiştirmeden paylaşımlıdan dedicated veya BYOC'ye geçiş yolu sunuyor.
- Görünürlük sağlıyor: bağlantı durumu, canlı topic görünümü ve önemli değerler için uyarılar.
- Paylaşımlı planlarda tenant izolasyonunu ve kötüye kullanım korumasını belgeliyor.
- Veri yerleşimi ve destek sorularınızı yazılı olarak yanıtlıyor.
Canlıya geçmeden önce MQTT production kontrol listesini gözden geçirin; kendi barındırdığınız bir Mosquitto'dan ayrılıyorsanız Mosquitto'yu bir bulut MQTT broker'a taşıma adımları sizi birkaç sürprizden kurtarır. Canlıya geçtikten sonra MQTT broker izleme yazısı hangi sinyalleri izlemeniz gerektiğini açıklar.
ConnectMQ'nun Yeri
ConnectMQ, yukarıda anlatılan dağıtım modelleri etrafında kurulmuş barındırılan bir MQTT broker'dır:
| Plan | Neler sunar |
|---|---|
| Serverless (Free) | Paylaşımlı küme, 25 bağlantıya kadar, QoS 1'e kadar, 256 KB mesajlar |
| Serverless (Paid) | 1.000 bağlantıya kadar, QoS 2, 1 MB mesajlar, paylaşımlı abonelikler |
| Dedicated | İş yükünüze ayrılmış izole küme |
| BYOC | Bulut hesabınızda çalışır, sizin için işletilir |
| Self Managed Enterprise | Kendi altyapınızda kendiniz çalıştırırsınız |
Her broker, Let's Encrypt sertifikasıyla TCP 1883, TLS 8883, WebSocket 8083 ve Secure WebSocket 8084 üzerinde MQTT 3.1.1 ve 5.0'ı destekler. Portal; tarayıcı içi bir MQTT client'ı, canlı bir topic gezgini, bir dashboard, ISA-95 seviyelerine göre düzenlenmiş bir cihaz görünümü ve uyarı loguyla birlikte eşik tabanlı uyarı kuralları içerir; Türkçe veya İngilizce kullanılabilir. Güvenlik tarafında multi-tenant izolasyon, plan bazlı kotalar, flood koruması, tekrarlanan başarısız oturum açma denemelerinden sonra IP engelleme ve verilen kimlik bilgilerine bağlı client ID'ler sunar. Endüstriyel kullanıcılar için ConnectMQ ayrıca ISA-95 ve Unified Namespace topic'lerini algılar ve Sparkplug B payload'larını çözer.
Bilerek yapmadığı şey ise veri yığınınızın yerini almaktır: yerleşik bir kural motoru veya veritabanı köprüsü yoktur; bu nedenle depolama ve otomasyon, yukarıda anlatıldığı gibi Telegraf, Node-RED veya kendi servisleriniz gibi standart MQTT client'larıyla yapılır.
Bulut MQTT Broker'ınızı Ücretsiz Başlatın
Client'larınızı bugün broker.connectmq.com üzerinde test edin, ardından app.connectmq.com adresinde özel bir broker oluşturun. Serverless ücretsiz plan kredi kartı gerektirmez ve ücretli, dedicated veya BYOC plana geçtiğinizde aynı kimlik bilgileri ve kod aynen taşınır.
Sık Sorulan Sorular
Bulut MQTT broker ile yönetilen MQTT broker arasındaki fark nedir?
Pratikte terimler örtüşür. "Bulut", broker'ın nerede çalıştığını ve cihazların ona nasıl ulaştığını; "yönetilen" ise onu kimin işlettiğini tanımlar. Barındırılan tekliflerin çoğu her ikisidir, ancak kendi Mosquitto'nuzu çalıştıran bir VM yönetilen olmadan bulutta barındırılır.
Bir bulut MQTT broker endüstriyel veriler için yeterince güvenli mi?
Her bağlantıda TLS, cihaz başına benzersiz kimlik bilgileri ve gereksinimlerinize uyan bir dağıtım modeli kullanırsanız olabilir. Katı veri yerleşimi kurallarına sahip fabrikalar genellikle paylaşımlı bir katman yerine dedicated veya BYOC dağıtımları seçer.
Ücretsiz bir bulut MQTT broker'ı production'da kullanabilir miyim?
Ücretsiz bir katman, limitleri dahilinde küçük ve kritik olmayan dağıtımlar için uygundur; örneğin ConnectMQ'nun Serverless ücretsiz planında 25 bağlantıya kadar. Anonim public broker ise production için asla uygun değildir, çünkü public alanını herkes okuyabilir.
Barındırılan bir MQTT broker'a bağlanmak için özel bir SDK gerekir mi?
Standartlara dayalı bir sağlayıcıda gerekmez. paho-mqtt, MQTT.js, MQTTnet, PubSubClient ve Mosquitto CLI araçları dahil herhangi bir MQTT 3.1.1 veya 5.0 client'ı çalışır.
Bir bulut MQTT broker'daki verileri bir veritabanında nasıl saklarım?
Veritabanınıza yazan bir abone çalıştırın; örneğin InfluxDB için Telegraf veya PostgreSQL için kısa bir Python betiği. Mesajları broker teslim eder; nerede saklanacaklarına abone karar verir.



