MQTT代理和Apache Kafka之间有什么区别

时间:2016-05-23 13:05:44

标签: apache-kafka mqtt iot

我正在开发一个移动消息应用程序。我正在经历所需的技术,并找到两个MQTT& Apache Kafta。对我来说,两者似乎都以相同的方式做同样的事情(在订阅和发布到主题方面)。

我听说MQTT适合手机,因为重量很轻?那么基本上这两者之间的区别是什么,以及其他各自的优势是什么?

2 个答案:

答案 0 :(得分:33)

Kafka背后的主要动机是可扩展性。

MQTT 是一种具有轻量级客户端/消息代理通信公共规范的协议,允许发布/订阅交换。客户端库和代理的多种实现(Mosquitto,JoramMQ ...)存在并且几乎兼容。 MQTT只是指定传输,并且模糊地指定应用程序部分(即如何处理和可能存储数据,如何授权客户端......)。如果主题上消耗的数据仅是实时的或可能持久的,则规范不明确。该规范没有说明实现MQTT的消息代理如何/应该扩展的任何内容。

另一方面, Apache Kafka 是基于内部“提交日志”的消息代理:它的重点是在磁盘上存储大量数据,并允许实时或稍后消费(只要磁盘上仍有数据)。它被设计为可部署为多个节点的集群,具有良好的可伸缩性。 Kafka使用自己的网络协议。

所以你在这里比较两个不同的东西:一个标准的pub / sub协议(有多个实现),一个特定的消息存储/分发软件,同一个家族的vaguley有自己的协议。

我想说如果你需要存储大量的消息,以确保批量处理,请多看看Kafka。如果您有许多客户端/应用程序在许多独立主题上实时交换消息,请查看MQTT(甚至是AMQP)消息代理实现。

答案 1 :(得分:9)

MQTT是标准协议(具有许多实现)。通常是通过从Apache网站或例如从融合的Docker映像。

就像比较苹果和橘子一样,两者存在的原因非常不同。

我在IoT环境中看到的大多数用例都将MQTT和Apache Kafka结合在一起。边缘设备使用MQTT协议(以其在边缘环境中的优势为代表。然后将这些转发给Apache Kafka,以将事件纳入企业架构的其余部分。

您可以通过HiveMQ + Apache Kafka之类的MQTT代理,也可以通过MQTT代理(这样就不需要MQTT代理)来执行此操作。当然,这两种选择都需要权衡。

请参阅此example of how to combine MQTT with Apache Kafka。或直接转到Github代码:“ Deep Learning UDF for KSQL for Streaming Anomaly Detection of MQTT IoT Sensor Data”。

我还创建了一个有关如何集成Apache Kafka and MQTT的实时演示。