本文不对三者之间的性能进行对比,只是从三者的特性上区分他们,并指出三者的不用应用场景。

1、publish/subscribe

发布订阅模式如下图所示可以具有多个生产者和发布者,redis、kafka、rebittMQ都满足这样的要求。

但是三者有各自的特色。

1.1 redis

redis的特征就是快,由于其数据是存储在内存中的,处理速度相对另外两者快了不少。通过使用redis可以实现一个简单具有实时通信功能的聊天室。

2.2 kafka

kafka的设计初衷是一个日志系统,其队列中的数据能够持久化一段时间。因此后来的consumer能够通过自定义offset来实现获取之前的消息,而redis就不具备这样的能力。

2.3 rabittMQ

rabittMQ设计的一个核心概念为Exchange,Exchange存在的意义是producer不会直接向queue发送消息,而是将消息先发给exchanger,而exchanger选择将数据转发给queue。rabittMQ的exchanger有4种转发策略,包括direct、topic、headers、fanout。因此rabittMQ在消息的路由方面相比redis和kafka更加灵活。

2、work queue

work queue模式相比发布订阅者模式更侧重负载均衡,我们可以把一个队列当做一个任务,而消费该队列的worker需要共同处理队列里的任务,同一条消息只能被处理一次。如下图所示是work queue的示意图:

2.1redis

redis可以使用list数据结构来实现这一任务,因为redis的单个操作是原子的,保障了一条消息只能被处理一次,但是缺点是consumer需要自己实现,还有一些负载均衡地策略也要自己去实现。

2.2rabittMQ

rabittMQ内部实现了这一功能,使用轮训的方式给worker发消息保证了负载均衡。缺点是可拓展性不好,当consumer相当多的时候,所有的consumer都要向同一个queue去获取数据,这样导致queue的性能称为了瓶颈。

2.3kafka

kafka通过consumer group的方式实现了work queue,同一个group的消费者能够协调完成任务。kafka在分布式方面做得很好,在kafka中,一个queue和topic的概念等同,只是topic可以被分成多个partition,而这些partition分别存储在不同的服务器上,这样,同一个Consumer group中的consumer在消费数据的时候可以从不同的partition中获取数据,减少了单台服务器的压力。

3、更加复杂的情况

如下图所示复杂的情况,以日志举例,error日志需要持久化,所有的日志都应该打印出来。那么这里有两个工作流,一个是持久化,一个是打印。

如果用redis和kafka来实现的话需要在producer上下功夫,将消息区分之后发送到不同的queue上,而rabittMQ则更加灵活,可以通过exchanger来实现消息的转发。

4、小节

redis的特点就是快

kafka的特点是可拓展性高,可以持久化

rabittMQ的特点是灵活,能够实现各种消息需求。

出自:https://blog.csdn.net/maitianshouwei/article/details/57124155

redis、kafka、rabittMQ对比的更多相关文章

  1. Redis和Memcached对比

    Redis和Memcached对比 这两年 Redis火得可以,Redis也常常被当作 Memcached的挑战者被提到桌面上来.关于Redis与Memcached的比较更是比比皆是.然而,Redis ...

  2. Redis和Memcached对比【转】

    Redis和Memcached对比 这两年 Redis火得可以,Redis也常常被当作 Memcached的挑战者被提到桌面上来.关于Redis与Memcached的比较更是比比皆是.然而,Redis ...

  3. Springboot集成mybatis(mysql),mail,mongodb,cassandra,scheduler,redis,kafka,shiro,websocket

    https://blog.csdn.net/a123demi/article/details/78234023  : Springboot集成mybatis(mysql),mail,mongodb,c ...

  4. 转发:RocketMQ与kafka的对比

    淘宝内部的交易系统使用了淘宝自主研发的Notify消息中间件,使用Mysql作为消息存储媒介,可完全水平扩容,为了进一步降低成本,我们认为存储部分可以进一步优化,2011年初,Linkin开源了Kaf ...

  5. redis、rabitmq对比

    redis.rabitmq对比 原文地址 简要介绍 RabbitMQ RabbitMQ是实现AMQP(高级消息队列协议)的消息中间件的一种,最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性 ...

  6. Redis+Kafka异步提高并发

    Redis+Kafka异步提高并发 Redis+Kafka异步提高并发 设计 实现 提交请求接口 Kafka消费队列 异步处理Service 客户端轮询获取结果 Redis集群节点配置 KafKa集群 ...

  7. redis、kafka、rabittMQ对比 (转)

    本文不对三者之间的性能进行对比,只是从三者的特性上区分他们,并指出三者的不用应用场景. 1.publish/subscribe 发布订阅模式如下图所示可以具有多个生产者和发布者,redis.kafka ...

  8. Kafka、 RabbitMQ、Redis、 ZeroMQ、 ActiveMQ、 Kafka/Jafka 对比

    Kafka是一种分布式的,基于发布/订阅的消息系统.主要设计目标如下: 以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间复杂度的访问性能. 高吞吐率.即使在非常廉价 ...

  9. RabbitMq、ActiveMq、Kafka和Redis做Mq对比

    转载自:https://blog.csdn.net/qiqizhiyun/article/details/79848834 一.RabbitMq RabbitMQ是一个Advanced Message ...

随机推荐

  1. mongoose更新文档的时候让某个字段自增

    Station.update({ _id: req.params.id }, { $set: req.body, $inc: { count: 1 } }, { multi: false }, cal ...

  2. linux命令(51):set 指定行,直接替换并修改文件

    sed 命令: 指定行,从第一行到第一行: 把该行的ssd,换成cd: -i 表示的是替换并直接修改文件: sed  -i  '1,1s/ssd/cd/g' test_file 命令使用: sed - ...

  3. 记录-UEFI启动的预装WIN8的笔记本里引导linux双系统

    新买了个联想笔记本,预装了WIN8,引导方式不再是几年前的MBR-BOIS引导了,是UEFI引导,所以,之前的grub4dos引导双系统方式都没用了. 现在把我装linux的关键过程记录下来,以备忘. ...

  4. IntelliJ IDEA 14.1.4导入项目启动报错:Error during artifact deployment.[组件部署期间出错]

    1.问题描述:Error during artifact deployment.[组件部署期间出错] 2.删除Artifacts 3.刷新 4.重新生成Artifacts 5.重新选择 再重新启动项目 ...

  5. ubuntu14 安装 端口转发工具rinetd

    1,下载  第一中方式 用 apt-get install rinetd  或者从官网下载http://www.boutell.com/rinetd/ 2,配置,端口转发的配置在 /etc/rinet ...

  6. 安装C/C++交叉编译环境

    转:http://blog.csdn.net/nokiaguy/article/details/8509739 X86架构的CPU采用的是复杂指令集(Complex Instruction Set C ...

  7. Web性能压力测试工具之WebBench

    在运维工作中,压力测试是一项很重要的工作.比如在一个网站上线之前,能承受多大访问量.在大访问量情况下性能怎样,这些数据指标好坏将会直接影响用户体验.但是,在压力测试中存在一个共性,那就是压力测试的结果 ...

  8. Python os.popen() 方法

    简述 就是新建一个管道执行一个命令. 方法是os.popen(命令,权限,缓冲大小) 比如 a = 'mkdir def' b = os.popen(a,) print b 就是等同于使用命令去创建了 ...

  9. MAMP和WAMP搭建Web环境,数据库,数据分布可视化

    MAMP和WAMP搭建Web环境,数据库,数据分布可视化 1. 数据库 用MAMP和WAMP搭建Web环境,数据分布可视化 Web环境Web服务器:Apache.Nginx,处理Web请求数据库:My ...

  10. [转]MySQL中int(11)最大长度是多少?

    原文地址:https://blog.csdn.net/allenjay11/article/details/76549503 今天在添加数据的时候,发现当数据类型为 int(11) 时,我当时让用户添 ...