使用带有kafka的mqtt协议作为消息代理

lkaoscv7  于 2021-06-08  发布在  Kafka
关注(0)|答案(5)|浏览(1161)

如何使用带有kafka的mqtt协议作为消息代理?
客户端(android/ios/桌面java应用程序等)将使用mqtt-phao客户端库来生成和消费消息,这些库使用kafka作为消息代理提供不同语言。
有什么建议吗?

kgsdhlau

kgsdhlau1#

这不是个好主意。mqtt客户机通常非常轻量级,资源有限。这些设备或物联网的内存/cpu容量很小。Kafka的客户一般都很重。例如,kafka客户机必须跟踪偏移量。它还需要与Zookeeper互动。简而言之,Kafka不适合作为mqtt经纪人。您最好选择一个流行的mqtt代理,比如蚊子。

p5cysglq

p5cysglq2#

正如@miroslav prymek所提到的,没有官方桥梁。这个是杰克伦创造的。我已经升级了桥梁,以支持Kafkav 0.8.1.1。还包含与jre 1.7兼容的预构建二进制文件。这里是mqttKafka桥的链接。

h79rfbju

h79rfbju3#

好吧,Kafka没有“官方”的mqtt连接器。但是你可以使用mqtt-kafka桥。要获得灵感,请看https://github.com/km4rcus/mqttkafkabridge (请注意,此实现中存在一个错误:kafka主题不能包含“/”,因此您可能希望在messagearrived in bridge.java文件中用“\替换它们)
请注意,此代码只是一个非常简单的解决方案,不可扩展。编写自定义实现以更好地满足您的期望可能是个好主意。但你应该尽可能简单-这是一个单一的失败点。只要您将数据放入kafka,您就可以得到一些保证,但mqtt broker没有保证。当桥撞毁时,你只是在丢失你的数据。。。

kgsdhlau

kgsdhlau4#

您可以使用mosca,一个用javascript编写的mqtt适配器。
mosca是node.js mqtt代理,可以单独使用,也可以嵌入到另一个node.js应用程序中
mosca支持不同的后端,比如redis和mongodb,但也支持kafka。mosca示例中包含了kafka mqtt桥应用程序。
linkedin上的这篇文章更全面地描述了这个解决方案。
免责声明:我是mosca kafka桥示例应用程序的贡献者。

cwtwac6a

cwtwac6a5#

您可以使用kafka源连接器,它将数据从mqtt代理(如mosquitto)流式传输到kafka集群。看到了吗https://github.com/evokly/kafka-connect-mqtt
运行连接器的最简单方法是在独立模式下,其中单个示例将在kafka集群上的单个节点上运行。您还可以在分布式模式下运行它(尽管配置更多),这将在集群中分布连接器以获得更大的吞吐量。在分布式模式下,您可以设计一种允许水平扩展、并行吞吐量和高可用性的拓扑结构。实现额外的保证需要额外的负载平衡器、多个mqtt代理以及最后遗嘱和测试场景来处理连接器崩溃,但这可能超出了这个问题的范围。
使用连接器方法具有kafka集群的优点,可以确保连接器处于活动状态,并在必要时重新启动它。分布式模式提供了更多的优势。

相关问题