使用mqtt协议和kafka作为消息代理

时间:2015-10-27 17:16:03

标签: architecture rabbitmq scalability apache-kafka mqtt

我们如何将mqtt协议与kafka一起用作消息代理?

客户端(android / ios / desktop java apps等)将使用mqtt phao客户端库生成和使用消息,这些库使用kafka作为消息代理以不同语言提供。

有什么建议吗?

4 个答案:

答案 0 :(得分:3)

AFAIK,没有"官方"适用于Kafka的MQTT连接器。但是你可以使用MQTT-Kafka桥。如需灵感,请查看https://github.com/km4rcus/mqttKafkaBridge(请注意,此实施中存在一个错误:kafka主题不能包含" /"因此您可能希望用&#替换它们34; _"在Bridge.java文件中的messageArrived中)

请注意,此代码只是一个非常简单的解决方案,不具备可扩展性。可能更好地编写自定义实现以满足您的期望,这是一个好主意。但是你应该尽可能地保持它 - 它只是一个单一的失败点。只要您将数据存入Kafka,您就可以获得一些保证,但您无法获得MQTT经纪人的保证。当桥梁崩溃时,你只是丢失数据......

答案 1 :(得分:1)

这不是一个好主意。 MQTT客户端通常非常轻量且资源有限。这些设备或物联网具有较小的内存/ CPU功率。卡夫卡客户通常很重。例如,Kafka客户端必须跟踪偏移量。它还需要与Zookeepers进行交互。简而言之,Kafka不适合作为MQTT经纪人。你最好选择一个流行的MQTT经纪人,如Mosquito。

答案 2 :(得分:0)

正如@Miroslav Prymek所说,没有正式的桥梁。这个是Jacklund创造的。我已升级桥梁以支持Kafka v 0.8.1.1。还包含与JRE 1.7兼容的预构建二进制文件。以下是MQTT Kafka Bridge的链接。

答案 3 :(得分:0)

您可以使用Mosca,一个用javascript编写的mqtt适配器。

  

Mosca是一个node.js mqtt代理,可以单独使用,也可以嵌入另一个Node.js应用程序中

Mosca支持不同的后端,如redis和mongodb,还有kafka。 Kafka MQTT Bridge应用程序是included in the Mosca examples

This article on linkedin更全面地描述了解决方案。

免责声明:我是Mosca Kafka Bridge示例应用程序的撰稿人。