redis、kafka、rabittMQ对比
本文不对三者之间的性能进行对比,只是从三者的特性上区分他们,并指出三者的不用应用场景。
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对比的更多相关文章
- Redis和Memcached对比
Redis和Memcached对比 这两年 Redis火得可以,Redis也常常被当作 Memcached的挑战者被提到桌面上来.关于Redis与Memcached的比较更是比比皆是.然而,Redis ...
- Redis和Memcached对比【转】
Redis和Memcached对比 这两年 Redis火得可以,Redis也常常被当作 Memcached的挑战者被提到桌面上来.关于Redis与Memcached的比较更是比比皆是.然而,Redis ...
- 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 ...
- 转发:RocketMQ与kafka的对比
淘宝内部的交易系统使用了淘宝自主研发的Notify消息中间件,使用Mysql作为消息存储媒介,可完全水平扩容,为了进一步降低成本,我们认为存储部分可以进一步优化,2011年初,Linkin开源了Kaf ...
- redis、rabitmq对比
redis.rabitmq对比 原文地址 简要介绍 RabbitMQ RabbitMQ是实现AMQP(高级消息队列协议)的消息中间件的一种,最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性 ...
- Redis+Kafka异步提高并发
Redis+Kafka异步提高并发 Redis+Kafka异步提高并发 设计 实现 提交请求接口 Kafka消费队列 异步处理Service 客户端轮询获取结果 Redis集群节点配置 KafKa集群 ...
- redis、kafka、rabittMQ对比 (转)
本文不对三者之间的性能进行对比,只是从三者的特性上区分他们,并指出三者的不用应用场景. 1.publish/subscribe 发布订阅模式如下图所示可以具有多个生产者和发布者,redis.kafka ...
- Kafka、 RabbitMQ、Redis、 ZeroMQ、 ActiveMQ、 Kafka/Jafka 对比
Kafka是一种分布式的,基于发布/订阅的消息系统.主要设计目标如下: 以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间复杂度的访问性能. 高吞吐率.即使在非常廉价 ...
- RabbitMq、ActiveMq、Kafka和Redis做Mq对比
转载自:https://blog.csdn.net/qiqizhiyun/article/details/79848834 一.RabbitMq RabbitMQ是一个Advanced Message ...
随机推荐
- 菜鸟学Java(十七)——Jboss瘦身
大家在用Jboss的时候可能跟我一样,觉得Jboss启动实在太慢!比起Tomcat几乎秒启的速度,Jboss几乎让人无法忍受.加上本人电脑配置比较低,Jboss启动最快的时候也是一分多钟,慢的时候四分 ...
- Spring Boot中扩展XML请求和响应的支持
在Spring Boot中,我们大多时候都只提到和用到了针对HTML和JSON格式的请求与响应处理.那么对于XML格式的请求要如何快速的在Controller中包装成对象,以及如何以XML的格式返回一 ...
- Eclipse 配置Maven以及修改默认Repository
今天将Eclipse关于Maven的配置总结一下,方便以后配置. 一.配置Maven环境 1.下载apache-maven文件,选择自己需要的版本,地址:http://mirrors.cnnic.cn ...
- python(41):copy拷贝(深拷贝deepcopy与浅拷贝copy)
Python中的对象之间赋值时是按引用传递的,如果需要拷贝对象,需要使用标准库中的copy模块. 1.copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象. 2.copy.deepco ...
- (转)Making 1 million requests with python-aiohttp
转自:https://pawelmhm.github.io/asyncio/python/aiohttp/2016/04/22/asyncio-aiohttp.html Making 1 millio ...
- VirtualBox与VMWare网络冲突
VirtualBox安装一个XP后,发现老是上不到网,怎么折腾都不行, 后来发现设备管理器中 vmware accelerated amd pcnet adapter #2显示黄色感叹号 不对呀,这是 ...
- 关于SpringKafka消费者的几个监听器:[一次处理单条消息和一次处理一批消息]以及[自动提交offset和手动提交offset]
自己在使用Spring Kafka 的消费者消费消息的时候的实践总结: 接口 KafkaDataListener 是spring-kafka提供的一个供消费者接受消息的顶层接口,也是一个空接口; pu ...
- SecurityError: Blocked a frame with origin from accessing a cross-origin frame
问题描述:浏览器报错I am loading an <iframe> in my HTML page and trying to access the elements within it ...
- LeetCode: Search a 2D Matrix 解题报告
Search a 2D Matrix Write an efficient algorithm that searches for a value in an m x n matrix. This m ...
- django HttpRequest对象
概述: 服务器接收http请求后,会根据报文创建HttpRequest对象 视图的第一个参数就是HttpRequest对象 django创建的,之后调用视图时传递给视图 属性 path:请求的完整路径 ...