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

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的特点是灵活,能够实现各种消息需求。

5 参考资料

原文链接:http://blog.csdn.net/maitianshouwei/article/details/57124155

转载于:https://www.cnblogs.com/hdu-2010/p/7690948.html

redis、kafka、rabittMQ对比 (转)相关推荐

  1. 阿里架构师直通车:Netty+NIO+Redis+Kafka共计13.62G,一键入职

    前言 在2020年,Java仍然是世界上最流行的编程语言之一.它拥有一个巨大的生态系统,在全世界有超过1000万Java开发人员. Java框架允许您关注应用程序的业务逻辑,而不是编写数据库连接或处理 ...

  2. 蚂蚁中间件团队Java面试题:Netty+Redis+Kafka+MongoDB+分布式

    蚂蚁中间件一面: 自我介绍 JVM垃圾回收算法和垃圾回收器有哪些,最新的JDK采用什么算法. 新生代和老年代的回收机制. 讲一下ArrayList和linkedlist的区别,ArrayList与Ha ...

  3. 为什么物联网大数据平台,使用TDengine,可不要redis, kafka, spark等软件?

    为什么物联网大数据平台,使用TDengine,可不要redis, kafka, spark等软件? TDengine是一高效的时序空间大数据处理引擎,因为充分利用物联网.车联网.工业互联网等场景的数据 ...

  4. redis监控软件对比

    Redis监控软件对比 配置Redis 集群监控,现在主流的有三种开源软件,Redis-live.Redis-state.Redis-monitor. (1)Redis-live:此项目5年没有维护过 ...

  5. redis、kafka、rabittMQ对比

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

  6. ibm linux mq 发送消息_RabbitMq、ActiveMq、Kafka和Redis做Mq对比

    一.RabbitMq RabbitMQ是一个Advanced Message Queuing Protocol(AMQP)的开源实现,由以高性能.可伸缩性出名的Erlang写成.RabbitMQ Se ...

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

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

  8. Spark Streaming与Kafka Streaming对比

    ♚ 叙述 对流处理的需求每天都在增加.原因是,处理大量数据通常是不够的. 必须快速处理数据,以便公司能够对不断变化的业务条件作出实时反应. 流处理是对数据进行连续.并行的实时处理. 流式处理是处理数据 ...

  9. logstash redis kafka传输 haproxy日志

    logstash 客户端收集 haproxy  tcp日志 input { file { path => "/data/haproxy/logs/haproxy_http.log&qu ...

  10. linux-在cenos上安装大全(nginx/JRE/maven/Tomcat/MYSQL/redis/kafka/es...)

    云服务器 阿里云 腾讯云 七牛云 百度云 天翼云 华为云 西部数码 自己购买一个,学生和企业用户都有优惠的. putty 自己下载一个putty,用来操作云服务器. putty.org 一路下一步就o ...

最新文章

  1. 崩溃!双十一第 4 天,某互联网公司黄了?
  2. DeepLearning tutorial(2)机器学习算法在训练过程中保存参数
  3. JAVA中流水账的实现_流水账式java基础Summary
  4. 报告!我还有几个阿里同事也去了亚运会
  5. 初等数论--整除--带余除法
  6. java面试题十四 基本类型的默认值
  7. Service Fabric 与Ocelot 的集成
  8. 自已开发完美的触摸屏网页版仿app弹窗型滚动列表选择器/日期选择器
  9. java 日期for循环_java for循环的时候增加循环体的长度是不是不太好的?
  10. 将一个JDBC的ResultSet转成XML并输出到文件
  11. 计算机网络智能化在铁路通信的发展,浅谈新技术在铁路通信中的应用
  12. 淘宝/天猫/京东/抖音直播年货节抢购秒杀助手更新下载,喵惠抢购助手支持自动免密支付,分享源码共同学习探讨
  13. 【Linux实验】LINUX系统的文件操作命令
  14. FPGA中数电基础知识
  15. sqlserver导入sql文件的方式
  16. linux cgroup 学习的一些总结
  17. HDU 1275 两车追及或相遇问题(相遇和追及公式)
  18. eclipes Java代码连接Mysql数据库
  19. 网页提示404什么意思
  20. 网页验证码显示在输入框input上的方法

热门文章

  1. 4. 吴恩达机器学习课程-作业4-神经网络学习
  2. python写入指定路径的文件_python 从shell读取指定文件以及写入指定文件
  3. 下载了linux版redis怎么用,Linux下redis的安装与使用图文教程
  4. java 鼠标拖拽_JavaScript DOM 鼠标拖拽
  5. 代码行数越少就越“简单”吗?
  6. idea连接Mysql报错
  7. spdlog: undefined reference to `fmt::SystemError::init(int, fmt::BasicCStringRef<char>, fmt::ArgList
  8. JS9 -- switch
  9. 数据流(任务并行库 TPL)
  10. 项目管理:实现按时、按预算、基于目标的交付的七个步骤