redis、kafka、rabittMQ对比
发布日期:2021-06-24 18:18:52 浏览次数:2 分类:技术文章

本文共 1409 字,大约阅读时间需要 4 分钟。

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

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

转载地址:https://blog.csdn.net/weixin_34248258/article/details/86362505 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:future封装了callable,thread封装future。
下一篇:Linux进程状态

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年03月31日 21时36分19秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

【Openstack】实录手动部署Openstack Rocky 双节点(4)- Nova 2019-04-28
【英语学习】【WOTD】cerebral 释义/词源/示例 2019-04-28
【英语学习】【Daily English】U11 Work L01 Would you like a tour of the office? 2019-04-28
【Linux使用】Centos 7安装图形界面/切换文本界面与图形界面 2019-04-28
【英语学习】【WOTD】opusculum 释义/词源/示例 2019-04-28
【英语学习】【WOTD】Parthian 释义/词源/示例 2019-04-28
【Linux使用】Centos 7设置时区与时钟(chrony / ntp /systemd) 2019-04-28
【Linux使用】Centos 7 YUM仓库配置文件代理服务器设置 2019-04-28
【英语学习】【English L06】U05 Appointments L5 I'd like to make an appointment with Mr. Grant 2019-04-28
【英语学习】【加州教材】【G6】【科学】Earth Science目录及术语表 2019-04-28
【英语学习】【English L06】U05 Appointments L6 The experience of booking or canceling 2019-04-28
【英语学习】【English L06】U06 Banking L1 How can I save money? 2019-04-28
【英语学习】【English L06】U06 Banking L2 A savings account sounds better for me 2019-04-28
【英语学习】【English L06】U06 Banking L3 Do you have a credit card? 2019-04-28
【英语学习】【English L06】U06 Banking L4 I'd like to transfer some money 2019-04-28
【英语学习】【English L06】U06 Banking L5 I'd like to change Chinese *yuan* into pounds 2019-04-28
【英语学习】【English L06】U06 Banking L6 Do you use online banking? 2019-04-28
【英语学习】【English L06】U07 Jobs L1 A computer programmer 2019-04-28
【英语学习】【English L06】U07 Jobs L2 I have my own bakery now 2019-04-28
【英语学习】【科学】【Glencoe Science】【A】Life's Structure and Function目录及术语表 2019-04-28