Kafka,Mq,Redis作为消息队列使用时的差异?
Kafka,Mq,Redis作为消息队列使用时的差异?
Kafka是作为新一代的消息系统,mq是比较成熟消息系统,而redis也可以发布订阅了,那么这三者有何异同?
自己查了查资料,了解了一下,其实,作为消息队列来说,企业中选择mq的还是多数,因为像Rabbit,Rocket等mq中间件都属于很成熟的产品,性能一般但可靠性较强,而kafka原本设计的初衷是日志统计分析,现在基于大数据的背景下也可以做运营数据的分析统计,而redis的主要场景是内存数据库,作为消息队列来说可靠性太差,而且速度太依赖网络IO,在服务器本机上的速度较快,且容易出现数据堆积的问题,在比较轻量的场合下能够适用。希望有更专业的人来总结总结。
RabbitMQ
是使用Erlang编写的一个开源的消息队列,本身支持很多的协议:AMQP,XMPP, SMTP, STOMP,也正是如此,使的它变的非常重量级,更适合于企业级的开发。同时实现了一个经纪人(Broker)构架,这意味着消息在发送给客户端时先在中排队。对路由(Routing),负载均衡(Load balance)或者数据持久化都有很好的支持。
Redis
是一个Key-Value的NoSQL数据库,开发维护很活跃,虽然它是一个Key-Value数据库存储系统,但它本身支持MQ功能,所以完全可以当做一个轻量级的队列服务来使用。对于RabbitMQ和Redis的入队和出队操作,各执行100万次,每10万次记录一次执行时间。测试数据分为128Bytes、512Bytes、1K和10K四个不同大小的数据。实验表明:入队时,当数据比较小时Redis的性能要高于RabbitMQ,而如果数据大小超过了10K,Redis则慢的无法忍受;出队时,无论数据大小,Redis都表现出非常好的性能,而RabbitMQ的出队性能则远低于Redis。
Kafka
Kafka是Apache下的一个子项目,是一个高性能跨语言分布式Publish/Subscribe消息队列系统,而Jafka是在Kafka之上孵化而来的,即Kafka的一个升级版。具有以下特性:快速持久化,可以在O(1)的系统开销下进行消息持久化;高吞吐,在一台普通的服务器上既可以达到10W/s的吞吐速率;完全的分布式系统,Broker、Producer、Consumer都原生自动支持分布式,自动实现复杂均衡;支持Hadoop数据并行加载,对于像Hadoop的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka通过Hadoop的并行加载机制来统一了在线和离线的消息处理,这一点也是本课题所研究系统所看重的。Apache Kafka相对于ActiveMQ是一个非常轻量级的消息系统,除了性能非常好之外,还是一个工作良好的分布式系统。
对比MQ与Kafka
1)在架构模型方面
RabbitMQ遵循AMQP协议,RabbitMQ的broker由Exchange,Binding,queue组成,其中exchange和binding组成了消息的路由键;客户端Producer通过连接channel和server进行通信,Consumer从queue获取消息进行消费(长连接,queue有消息会推送到consumer端,consumer循环从输入流读取数据)。rabbitMQ以broker为中心;有消息的确认机制。
kafka遵从一般的MQ结构,producer,broker,consumer,以consumer为中心,消息的消费信息保存的客户端consumer上,consumer根据消费的点,从broker上批量pull数据;无消息确认机制。
2)在吞吐量
kafka具有高的吞吐量,内部采用消息的批量处理,zero-copy机制,数据的存储和获取是本地磁盘顺序批量操作,具有O(1)的复杂度,消息处理的效率很高。
rabbitMQ在吞吐量方面稍逊于kafka,他们的出发点不一样,rabbitMQ支持对消息的可靠的传递,支持事务,不支持批量的操作;基于存储的可靠性的要求存储可以采用内存或者硬盘。
3)在可用性方面,
rabbitMQ支持miror的queue,主queue失效,miror queue接管。
相关文章
- Redis的分布式锁python-redis-lock使用
- Redis用作消息队列MQ
- 补习系列(14)-springboot redis 整合-数据读写
- redis 密码配置
- Kafka+Spark Streaming+Redis实时计算整合实践
- 【Redis】yum安装redis
- windows redis:Uncaught exception 'RedisException' with message 'Redis server went away'
- redis实践:用户注册登录功能
- Redis学习(2)-redis安装
- Kafka,Mq,Redis作为消息队列使用时的差异?
- Redis-Cluster实战--5.使用redis-cli安装
- redis集群之REDIS CLUSTER
- Redis-Cluster实战--5.使用redis-cli安装
- Atitit mybatis 配置 redis 集成 attilax总结 艾提拉总结 1.1. setting name="cacheEnabled" v1 1.2. Mapper文件1 1.
- Atitit redis使用 attilax 艾提拉总结 1.1. Redis默认有16个库,默认连接的是 index=0 的那一个。解决与原来不方便查询查看的问题1 1.2. redis不是现
- Linux随笔(安装ftp,安装jdk,安装 tomcat,安装redis,安装MySQL,安装svn)
- 〖Python 数据库开发实战 - Python与Redis交互篇⑫〗- 综合案例 - 新闻管理系统 - 删除新闻(含redis缓存)
- 带你掌握Redis数据类型:string和Hash
- 补习系列(14)-springboot redis 整合-数据读写
- redis启动报错,需要关闭快照,报错-MISCONF Redis is configured to save RDB snapshots-解决
- Redis综述
- Redis源代码分析(十二)--- redis-check-dump本地数据库检測
- redis_05 _ 内存快照:宕机后,Redis如何实现快速恢复
- redis为什么内存不宜过大
- Redis-3.2.0集群配置(redis cluster)
- redis设置密码和redis主从复制
- Redis 与 hash (哈希)相关的常用命令
- Redis进阶学习08--多级缓存
- Redis进阶学习06--分布式缓存--上
- 【服务器安装Redis】Centos7离线安装redis
- 【Redis】Redis持久化机制
- 解开Kafka神秘的面纱(五):kafka优雅应用