【问题标题】:using mqtt protocol with kafka as a message broker使用 mqtt 协议和 kafka 作为消息代理
【发布时间】:2015-10-27 17:16:03
【问题描述】:

我们如何使用 mqtt 协议和 kafka 作为消息代理?

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

有什么建议吗?

【问题讨论】:

    标签: architecture rabbitmq scalability apache-kafka mqtt


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您可以使用 Kafka 源连接器,它将数据从 Mosquitto 等 MQTT 代理流式传输到 Kafka 集群。见https://github.com/evokly/kafka-connect-mqtt

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

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

      【讨论】:

        【解决方案3】:

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

        请注意,此代码只是一个非常简单的解决方案,不可扩展。编写自定义实现以更好地满足您的期望可能是一个好主意。但是你应该让它尽可能简单——这是一个单点故障。只要您将数据输入 Kafka,您就可以获得一些保证,但您无法从 MQTT 代理那里获得任何保证。当桥梁崩溃时,您只是在丢失数据......

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            【解决方案5】:

            您可以使用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 示例应用程序的贡献者。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2021-03-04
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-12-10
              • 1970-01-01
              相关资源
              最近更新 更多