首页 文章

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

提问于
浏览
6

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

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

有什么建议?

5 回答

  • 1

    您可以使用Kafka源连接器将来自像Mosquitto这样的MQTT代理的数据流式传输到Kafka集群中 . 见https://github.com/evokly/kafka-connect-mqtt

    运行连接器的最简单方法是独立模式,其中单个实例将在单个节点上的Kafka群集上运行 . 您也可以在分布式模式下运行它(虽然配置更多),这将在集群中分配连接器以获得更高的吞吐量 . 在分布式模式下,您可以设计一种允许水平扩展,并行吞吐量和高可用性的拓扑 . 实现额外的保证需要额外的负载 balancer 器,多个MQTT代理以及处理连接器崩溃的最后遗嘱和遗嘱场景,但这可能超出了这个问题的范围 .

    使用连接器方法具有Kafka群集的优势,可确保连接器处于活动状态,并在必要时重新启动它 . 分布式模式提供了更多优势 .

  • 0

    AFAIK,Kafka没有"official" MQTT连接器 . 但是你可以使用MQTT-Kafka桥 . 如需灵感,请查看https://github.com/km4rcus/mqttKafkaBridge(请注意,'s a bug in this implementation: kafka topics can' t包含"/",因此您可能希望在Bridge.java文件的messageArrived中用"_"替换它们)

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

  • 3

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

  • 4

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

  • 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示例应用程序的贡献者 .

相关问题