消息队列的优缺点比较

http://blog.csdn.net/Post_Yuan/article/details/52404417?locationNum=9

与其他MQ相比较,Kafka有一些优缺点,主要如下,

优点:

可扩展。Kafka集群可以透明的扩展,增加新的服务器进集群。

高性能。Kafka性能远超过传统的ActiveMQ、RabbitMQ等,Kafka支持Batch操作。

容错性。Kafka每个Partition数据会复制到几台服务器,当某个Broker失效时,Zookeeper将通知生产者和消费者从而使用其他的Broker。

缺点:

重复消息。Kafka保证每条消息至少送达一次,虽然几率很小,但一条消息可能被送达多次。

消息乱序。Kafka某一个固定的Partition内部的消息是保证有序的,如果一个Topic有多个Partition,partition之间的消息送达不保证有序。

复杂性。Kafka需要Zookeeper的支持,Topic一般需要人工创建,部署和维护比一般MQ成本更高。

RabbitMQ

遵循AMQP实现,传统的messaging queue系统实现,基于Erlang语言开发,用在对数据一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量还在其次。支持协议还包括XMPP、SMTP、STOMP,是一款重量级MQ,更适合于企业级的开发。实现Broker构架,消息在发送给客户端时先在中心队列排队。对路由、负载均衡及数据持久化都有良好的支持。

ZeroMQ

只是一个网络编程的Pattern库,将常见的网络请求形式模式化、组件化。ZeroMQ能实现RabbitMQ不擅长的高级复杂队列,但开发人员需要自己组合多种技术框架,技术复杂度是一个挑战。仅提供非持久性的队列,如果Down机,数据将丢失。

Redis

Key-Value的NoSQL数据库,本身也支持MQ功能,可以完全当做一个轻量级的队列使用。Redis在数据量大的时候入队较慢,Redis出队则无论数据量大小性能都不错。

Kafka

LinkedIn开源的MQ系统,基于Pull的模式来处理消息消费,追求高吞吐量,一开始的目的是用于日志收集和传输,0.8开始支持复制,不支持事务,适合产生大量数据的互联网服务的数据收集业务。

kafka的优点:

1.主要是用来解决百万级别的数据中生产者和消费者之间数据传输的问题

2.可以将一条数据提供给多个接收这做不同的处理

3.当两个系统是隔绝的,无法通信的时候,如果想要他们通信就需要重新构建其中的一个工程,而kafka实现了生产者和消费者之间的无缝对接。

4.大数据时代,最重要的是数据的收集和分析,这些数据包括:

1).用户的行为数据

2).应用工程的性能数据

3).日志的用户活动数据等

5.kafka提供了系统之间的消息通信,对于生产者而言,只关注与把消息发送的kafka上,而并不关心这个消息是被谁消费的(kafka相当于消息的代理者)。

6.kafka是一个开源的消息发布和订阅系统,主要用于以下场景中:

1).持续的消息:为了从大数据中派生出有用的数据,任何数据的丢失都会影响生成的结果,kafka提供了一个复杂度为O(1)的磁盘结构存储数据,即使是对于TB级别的数据都是提供了一个常量时间性能。

2).高吞吐量:keep big data in mind,kafka采用普通的硬件支持每秒百万级别的吞吐量

3).分布式:明确支持消息的分区,通过kafka服务器和消费者机器的集群分布式消费,维持每一个分区是有序的。

4).支持多种语言:java、.net、php、ruby、python。

5).实时性:消息被生成者线程生产就能马上被消费者线程消费,这种特性和事件驱动的系统是相似的。

kafka 0.8的新特性:

1.在0.8之前,当一个服务器出现问题的时候,没有不被消费的数据将丢失,0.8的分区提供了数据的复制和备份,确保至少有一份数据是可用的

2.以前,生产者的消息会阻塞,直到这个消息被复制到所有的副本中,但是生产者可以配置是否提交到单一的服务器。

3.kafka消费这轮循模式变成一个长拉取模式,一直阻塞到一个提交的消息是有效的,避免频繁的拉取

4.实现了管理工具,例如:控制族群的关闭和leader的选举工具管理kafka集群。

ZeroMQ(?MQ),你们看这名字,说的是没有mq,还非说它是mq,这动点脑子好么。zmq是支持fanout、topic这些功能的高级socket,不再是传统socket的点到点通信了,于是乎似乎有了mq语义。但是,mq作为一个服务,重要意义是解耦系统中的不同服务,然而zmq不是一个独立服务进程,自然没有mq这种在中间解耦的能力。而kafka和rmq虽然有太多不同的地方,但都是有顺序性的消息存储服务,可以用来解耦各种信息的生产者和消费者。所以,这三个东西不是同一层面的东西,rabbitmq 和 zmq 在名字里都有mq,但不都是mq,不是一个位置的东西;kafka不叫mq是因为它不支持amqp,但实质上还可以当是个mq,和rmq差不多是一个位置的东西。

作者:Wang Xu

链接:https://www.zhihu.com/question/22480085/answer/175468965

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

http://www.chinacloud.cn/show.aspx?id=24593&cid=17

参考 http://zqhxuyuan.github.io/2016/01/14/2016-01-14-Kafka-ISR/

http://zqhxuyuan.github.io/2016/01/13/2016-01-13-Kafka-Picture/

http://jianbeike.blogspot.com.au/2016/04/kafka.html

http://zqhxuyuan.github.io/2016/01/14/2016-01-14-Kafka-ISR/

http://www.oschina.net/translate/kafka-replication?print

http://www.jianshu.com/p/3f24d4b53f7f

https://www.iteblog.com/archives/1805

http://www.cnblogs.com/fxjwind/p/4972244.html

http://www.jasongj.com/2015/04/24/KafkaColumn2/

//kafka安装

http://yanliu.org/2015/08/31/kafka%E9%9B%86%E7%BE%A4%E9%85%8D%E7%BD%AE/

http://bbs.kekeyun.com/thread-101-1-1.html

http://blog.csdn.net/lizhitao/article/details/45066437

分布式系统 的优点 就是 将原本一台服务器受到的压力,分散到不同服务器上去

https://www.cnblogs.com/taek/p/5878666.html

时间: 2024-08-08 03:24:17

消息队列的优缺点比较的相关文章

关于消息队列的优缺点,看这篇就行

在项目中为什么要使用消息队列 消息队列使用场景主要有三个: 解耦,异步,削峰 1.解耦 如上图所示,可能存在某一个系统产生关键数据,所有系统都需要其进行提供数据,导致A系统与要提供数据系统产生耦合,系统拓展,其他系统的需求修改都会导致A系统产生修改. 2.异步 如果用户一个点击,需要几个系统间的一系列反应,同时每一个系统肯都存在一定的耗时,那么可以使用mq对不同的系统进行发送命令,进行异步操作. 3.削峰 主要是如果存在用户使用的高峰期,例如存在大量的请求访问数据库(mysql每秒2000个请求

WCF分布式开发必备知识(1):MSMQ消息队列

本章我们来了解下MSMQ的基本概念和开发过程.MSMQ全称MicroSoft Message Queue,微软消息队列,是在多个不同应用之间实现相互通信的一种异步传输模式,相互通信的应用可以分布于同一台机器上,也可以分布于相连的网络空间的任一位置.它的实现原理是:消息的发送者要把自己想要发送的信息放入一个容器中(我们称之为Message),然后把它保存至一个系统公用空间的消息队列(Message Queue)中,本地或者是异地的消息接收程序再从该队列中取出发给它的消息进行处理.其中两个重要的概念

MSMQ消息队列

一.引言 Windows Communication Foundation(WCF)是Microsoft为构建面向服务的应用程序而提供的统一编程模型,该服务模型提供了支持松散耦合和版本管理的序列化功能,并提供了与消息队列(MSMQ).COM+.Asp.net Web服务..NET Remoting等微软现有的分布式系统技术.利用WCF平台,开发人员可以很方便地构建面向服务的应用程序(SOA).可以认为,WCF是对之前现有的分布式技术(指的是MSMQ..NET Remoting和Web 服务等技术

跟我一起学WCF(1)——MSMQ消息队列

一.引言 Windows Communication Foundation(WCF)是Microsoft为构建面向服务的应用程序而提供的统一编程模型,该服务模型提供了支持松散耦合和版本管理的序列化功能,并提供了与消息队列(MSMQ).COM+.Asp.net Web服务..NET Remoting等微软现有的分布式系统技术.利用WCF平台,开发人员可以很方便地构建面向服务的应用程序(SOA).可以认为,WCF是对之前现有的分布式技术(指的是MSMQ..NET Remoting和Web 服务等技术

PHP(Mysql/Redis)消息队列的介绍及应用场景案例--转载

郑重提示:本博客转载自好友博客,个人觉得写的很牛逼所以未经同意强行转载,原博客连接 http://www.cnblogs.com/wt645631686/p/8243438.html 欢迎访问 在进行网站设计的时候,有时候会遇到给用户大量发送短信,或者订单系统有大量的日志需要记录,还有做秒杀设计的时候,服务器无法承受这种瞬间的压力,无法正常处理,咱们怎么才能保证系统正常有效的运行呢?这时候我们就要引用消息队列来实现这类的需求,这时候就需要一个中间的系统进行分流和解压.消息队列就是一个中间件,需要

面试官对于消息队列的连环炮

1. 引子 消息队列分布式系统中重要的组件,一种存放消息的容器,主要作用有解耦.异步.削锋,是大型分布式系统不可缺少的中间件. 常见的消息队列有 ActiveMQ,RabbitMQ,RocketMQ,Kafka. 简历中涉及到了消息队列,面试官先问了这样几个问题: 你们系统里为什么要使用消息队列? 既然使用了消息队列,说说他还有什么使用场景? 消息队列的优缺点是什么? 2. 为什么使用消息队列? 我的回答:甲方提供 EOS 充值服务,我方进行调用.出于解耦的目的,引入了消息队列. 一个类似应试的

【消息队列】为什么要使用消息队列、消息队列优缺点??

本文首发于微信公众号[坂本先生] 原文地址:https://mp.weixin.qq.com/s/XjfuMdLZALH7h7JNXrpIpA 一.为什么使用消息队列 核心的有3个:解耦.异步.削峰 (1)解耦 传统模式: 传统模式的缺点: 系统间耦合性太强,如上图所示,系统A在代码中直接调用系统B和系统C的代码,如果将来D系统接入,系统A还需要修改代码,过于麻烦! 中间件模式: 中间件模式的的优点: 将消息写入消息队列,需要消息的系统自己从消息队列中订阅,从而系统A不需要做任何修改. (2)异

消息队列的使用场景及优缺点?

(1)为什么使用消息队列啊? 其实就是问问你消息队列都有哪些使用场景,然后你项目里具体是什么场景,说说你在这个场景里用消息队列是什么 面试官问你这个问题,期望的一个回答是说,你们公司有个什么业务场景,这个业务场景有个什么技术挑战,如果不用MQ可能会很麻烦,但是你现在用了MQ之后带给了你很多的好处 先说一下消息队列的常见使用场景吧,其实场景有很多,但是比较核心的有3个:解耦.异步.削峰 解耦:现场画个图来说明一下, A系统发送个数据到BCD三个系统,接口调用发送,那如果E系统也要这个数据呢?那如果

关于MQ的几件小事(一)消息队列的用途、优缺点、技术选型

1.为什么使用消息队列? (1)解耦:可以在多个系统之间进行解耦,将原本通过网络之间的调用的方式改为使用MQ进行消息的异步通讯,只要该操作不是需要同步的,就可以改为使用MQ进行不同系统之间的联系,这样项目之间不会存在耦合,系统之间不会产生太大的影响,就算一个系统挂了,也只是消息挤压在MQ里面没人进行消费而已,不会对其他的系统产生影响. (2)异步:加入一个操作设计到好几个步骤,这些步骤之间不需要同步完成,比如客户去创建了一个订单,还要去客户轨迹系统添加一条轨迹.去库存系统更新库存.去客户系统修改