簡體   English   中英

使用mqtt協議和kafka作為消息代理

[英]using mqtt protocol with kafka as a message broker

我們如何將mqtt協議與kafka一起用作消息代理?

客戶端(android / ios / desktop java apps等)將使用mqtt phao客戶端庫生成和使用消息,這些庫使用kafka作為消息代理以不同語言提供。

有什么建議?

您可以使用Kafka源連接器將來自像Mosquitto這樣的MQTT代理的數據流式傳輸到Kafka集群中。 請參閱https://github.com/evokly/kafka-connect-mqtt

運行連接器的最簡單方法是獨立模式,其中單個實例將在單個節點上的Kafka群集上運行。 您也可以在分布式模式下運行它(雖然配置更多),這將在集群中分配連接器以獲得更高的吞吐量。 在分布式模式下,您可以設計一種允許水平擴展,並行吞吐量和高可用性的拓撲。 實現額外的保證需要額外的負載平衡器,多個MQTT代理以及處理連接器崩潰的最后遺囑和遺囑場景,但這可能超出了這個問題的范圍。

使用連接器方法具有Kafka群集的優勢,可確保連接器處於活動狀態,並在必要時重新啟動它。 分布式模式提供了更多優勢。

AFAIK,Kafka沒有“官方”MQTT連接器。 但是你可以使用MQTT-Kafka橋。 有關靈感,請訪問https://github.com/km4rcus/mqttKafkaBridge (請注意,此實現中存在一個錯誤:kafka主題不能包含“/”,因此您可能希望在消息中使用“_”替換它們.java文件)

請注意,此代碼只是一個非常簡單的解決方案,不可擴展。 最好編寫自定義實現以更好地滿足您的期望。 但是你應該盡可能地保持它 - 這是一個單點故障。 只要您將數據存入Kafka,您就可以獲得一些保證,但您無法獲得MQTT經紀人的保證。 當橋崩潰時,你只是丟失數據......

這不是一個好主意。 MQTT客戶端通常非常輕量且資源有限。 這些設備或物聯網具有較小的內存/ CPU功率。 卡夫卡客戶通常很重。 例如,Kafka客戶端必須跟蹤偏移量。 它還需要與Zookeepers進行交互。 簡而言之,Kafka不適合作為MQTT經紀人。 你最好選擇一個流行的MQTT經紀人,如Mosquito。

正如@Miroslav Prymek所說,沒有官方的橋梁。 這個是Jacklund創造的。 我已升級橋梁以支持Kafka v 0.8.1.1。 還包含與JRE 1.7兼容的預構建二進制文件。 這是MQTT卡夫卡橋的鏈接。

你可以使用Mosca ,一個用javascript編寫的mqtt適配器。

Mosca是一個node.js mqtt代理,可以單獨使用,也可以嵌入另一個Node.js應用程序中

Mosca支持不同的后端,如redis和mongodb,還有kafka。 Mosca示例中包含 Kafka MQTT Bridge應用程序。

關於linkedin的這篇文章更全面地描述了解決方案。

免責聲明:我是Mosca Kafka Bridge示例應用程序的貢獻者。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM