IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> kafka与rabbitmq简单对比 -> 正文阅读

[大数据]kafka与rabbitmq简单对比

1、语言

?????? Kafka:采用目前比较主流的Java语言开发,运行依赖于JDK,比较适合Java开发者做源码深入或者加入其开源社区成为一个committee。

?????? Rabbitmq:采用erlang语言开发,一种广泛应用在电信通信行业的语言。

2、通信协议

????????Kafka:自己基于TCP实现的专有协议,Kafka的专有通信协议不包含Schema,内容简短,同时多条消息压缩的batch处理方式,减少了网络和CPU处理的压力,也是kafka吞吐量大的原因之一。

????????Rabbitmq:AMQP协议,一种专为消息队列而生的协议。

3、设计初衷

?????? Kafka:最初是领英为了解决生产日志存储处理而打造的一款产品。

?????? Rabbitmq:为了消息队列而生的中间件。

4、对zk的依赖

?????? Kafka:在早期版本中把topic分区、消费者生产者等元数据保存在了zk,中期版本把元数据保存在了各个broker中,逐步脱离对zk的依赖,但是controller的选举还依赖于zk,最新版本2.8.0中彻底放弃了对zk的依赖,当分区数量过多的情况下,这个过程对性能的影响比较大,去除这个依赖后,可以支持百万级别的分区,对于kafka的发展来说无疑是一个好消息,但目前不建议在生产环境中使用。

?????? Rabbitmq:一直对zk强依赖。

5、架构设计

Kafka:

????????生产者,消费者,消费者组,broker,topic和分区

????????生产者和消费组无需过多的描述,懂的都懂。

????????消费者组:指定有同一group的消费者,组内消费者数<=topic的分区数,大于没有意义,因为一个分区数只能由组内的一个消费者对应,一个消费者可以对应多个分区,这也是kafka扩展性和负载均衡体现点。

????????Broker:kafka server实例。

????????topic和分区:topic订阅主题,逻辑概念;创建主题为会其指定分区数,分区是实际存储主题消息的物理概念,分布在各个broker实例上。分区又有主分区和副本节点,每个主分区存放的数据是不一样的,也就是生产发送过来的数据会均衡写入到各个分区中,分区副本会同步主节点的数据。

????????生产者发送消息先经过序列化器序列化消息,然后再经过分区器选择把消息写入的最终分区,这时候如果消费者的消费是紧跟着生产者写入的,那么消息无需经过磁盘,会直接给到消费者。分区中会维持着消费者的消费偏移量,消费者可以选择从头消费,也可以选择从已确认的偏移量处开始消费,消费者的偏移量是可以重置的,可以指定移到指定偏移量处,当生产故障的时候可以使用该方式。

Rabbitmq:

?????? 主要有生产者、消费者、交换器、队列四种角色,交换器定义了消息路由策略,队列则是消息在中间件实际存放的地方。建立连接后,生产者通过 channel通道发送消息,消息先来到交换器,交换器根据策略和消息的 routing key 把消息再分发到对应的队列,消费者最后消费队列中的消息。

6、消息保留策略

????????Kafka:消息是会写入分区的磁盘文件的,两种历史数据保留策略,一种是保存过去多长时间的数据,一种是保证文件的固定大小,两种机制可以同时使用。提供了历史消息回溯的能力。

????????Rabbitmg: 消息被消费者处理完成后,就会删掉。

7、消息路由

????????Kafka:不提供任务的路由过滤机制,消费者订阅对应主题则会收到该主题上所有的消息。

????????Rabbitmg: 不同的交换器类型有着不同的队列分发策略,可以根据需要灵活地结合交换器和 routing key 值来在中间件层实现消息路由。

8、消息顺序

????????Kafka:在同一 topic,单一分区,单个消费者情况下,能保证消息能够按照发送的顺序达到消费者端(如果消费者使用的多线程来处理的话,这里不能保证消息被处理的顺序)但是这种情况下根本无法发挥 kafka 吞吐量大的特点。多分区、多消费者、消费者组的情况下,没法保证消息的顺序性,虽然分区是有序的,但是没法保证分区对应消费者的处理能力,实际情况是没法控制的,一个分区被处理完了,另一个分区还存在大量的消息积压,顺序自然没法保证了。

????????Rabbitmg:正常情况下能够保证消息顺序到达消费者处,但是如果发生异常,消息没有得到成功处理,那么会回到队列中,这时候消息顺序性没法保证。

9、扩展能力

????????Kafka:具有良好的横向扩展能力,通过增加分区数和消费者数提高系统处理能力。

????????Rabbitmg:更便于纵向扩展。

10、可靠性保证

????????两种在生产者和消费者上都提供了一些机制来确保消息的可靠性,比如失败重发,消息确认 ack 等机制,但是完全可靠还是得需要业务来做一些保证,比如失败重发都失败了,业务应用层面需不需要记录该失败信息。

11、适合场景

?????? Kafka:更适合大数据场景下的技术选型,在吞吐量、流处理支持上更好。

?????? Rabbitmq:适合真正意义上的消息队列,适合对可靠性要求较高的场合。

建议通过书籍系统性学习

《kafka权威指南》

《深入rabbitmq》

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-09-04 17:36:52  更:2021-09-04 17:37:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 17:18:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码