消息队列的优缺点比较

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了消息队列的优缺点比较相关的知识,希望对你有一定的参考价值。

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

以上是关于消息队列的优缺点比较的主要内容,如果未能解决你的问题,请参考以下文章

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

消息队列面试题

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

消息的主题和队列

详解MQ消息队列及四大主流MQ的优缺点

kafkaactivemqrabbitmqrocketmq的优缺点和使用场景