传统消息系统的不孝子嗣mqtt和kafka
MQTT 是协议,是一个技术标准,而 Kafka 是已经实现的开源流处理平台。两者虽然都是从传统的Pub/Sub消息系统演化出来的,但是进化的方向不一样,两者之前唯一存在的联系恐怕就是它们都和发布/订阅范式有关了吧。MQTT 是基于发布/订阅范式的消息协议,而 Apache Kafka 的生产、消费的流程也是属于发布/订阅范式的。那么如果我们基于 MQTT 协议去实现一个消息 broker ,是否这个 MQTT broker是否能和 Kafka 作用等价呢? 答案当然是否定的!
Kafka 虽然也是基于发布订阅范式的消息系统,但它同时也被称为“分布式提交日志”或者“分布式流平台”,它的最主要的作用还是实现分布式持久化保存数据的目的。Kafka 的数据单元就是消息,可以把它当作数据库里的一行“数据”或者一条“记录”来理解,Kafka 通过主题来进行分类,Kafka 的生产者发布消息到某一特定主题上,由消费者去消费特定主题的消息,其实生产者和消费者就可以理解成发布者和订阅者,主题就好比数据库中的表,每个主题包含多个分区,分区可以分布在不同的服务器上,也就是说通过这种方式来实现分布式数据的存储和读取, Kafka 分布式的架构利于读写系统的扩展和维护(比如说通过备份服务器来实现冗灾备份,通过架构多个服务器节点来实现性能的提升),在很多有大数据分析需求的大型企业,都会用到 Kafka 去做数据流处理的平台。
而 MQTT 最开始就是为物联网设备的网络接入而设计的,物联网设备大多都是性能低下,功耗较低的计算机设备,而且网络连接的质量也是不可靠的,所以在设计协议的时候最需要考虑的几个重点是:
- 协议要足够轻量,方便嵌入式设备去快速地解析和响应。
- 具备足够的灵活性,使其足以为 IoT 设备和服务的多样化提供支持。
- 应该设计为异步消息协议而非同步协议,这么做是因为大多数 IoT 设备的网络延迟很可能非常不稳定,若使用同步消息协议,IoT 设备需要等待服务器的响应,对于为大量的 IoT 设备提供服务这一情景,显然是非常不现实的。
- 必须是双向通信,服务器和客户端应该可以互相发送消息。
MQTT 协议完美地解决了上述几点要求,并且最新版的 MQTT v5.0 协议做了很多优化,使其协议相比过去的 v3.1.1 版本具备更强大的灵活性以及对带宽的更少占用。
要说基于 MQTT 协议的消息 broker 和 Kafka 的区别的话,还是在于它们的侧重点不同,Kafka 的侧重点在于数据的存储和读取,针对实时性比较高的流式数据处理场景;而 MQTT broker 的侧重点在于客户端和服务器的通信。
MQTT broker 与 Kafka 所采用的消息交换范式是如此相近,将其两者结合起来使用显然是一个非常不错的主意,事实上,很多 MQTT broker,诸如 EMQ X 已经实现了 MQTT broker 与 Kafka 的桥接。MQTT broker 用来快速的对大量物联网设备发来的消息做接收处理响应,而 Kafka 对这些大量的数据做采集存储,交给数据分析人员来分析处理消息。
说白了都是传统消息系统(老爸)的子嗣,只是与不同的场景(老妈)结合的产物。不过,两者却可以结合起来使用。比如可以用MQTT接受物联网设备上传的数据,然后接入Kafka,最后可以同时分发到HDFS归档、数据仓库做OLAP分析、Elasticsearch做全文检索,这样的架构非常适合大型物联网项目,不但能够处理海量数据同时也具有很好的扩展性。
相关文章
- 报错:Kafka No kafka server to stop
- 数据源管理 | Kafka集群环境搭建,消息存储机制详解
- 常用消息队列 Kafka、RabbitMQ、RocketMQ、ActiveMQ 综合对比(18个方面)
- Apache Kafka源码分析 - kafka controller
- Kafka_Kafka 消费者 偏移量 与 积压 查询脚本 kafka-consumer-groups.sh
- Filebeat+Kafka+Logstash+ElasticSearch+Kibana+Springboot二次部署笔记
- CentOS6 Install kafka
- Linux系统中的page cache和buffer cache的概念、机制及kafka、redis等产品如何利用page cache
- 20 图 14 问带你轻松入门 Kafka!
- 分布式发布订阅消息系统 Kafka 架构设计
- kafka---broker 保存消息
- 【kafka源码】分区副本重分配之kafka跨目录数据迁移实现源码解析
- 【kafka运维】Kafka全网最全最详细运维命令合集(精品强烈建议保存)
- 【kafka异常】kafka 常见异常处理方案(持续更新! )
- 【kafka问题】记一次kafka消费者未接收到消息问题
- kafka producer batch expired TimeoutException: KAFKA-5621、KIP-91(Provide Intuitive User Timeouts in The Producer)、KAFKA-5886
- Kafka 分布式消息系统详解
- 11. 构建EMQ连接Kafka的插件,实现消息由MQTT Broker传递至Kafka
- linux下安装kafka消息队列
- KAFKA分布式消息系统
- kafka Windows客户端Linux服务器---转
- 【Kafka】Apache Kafka消息队列JavaAPI实战
- 【Kafka】Apache Kafka消息队列概述及环境搭建