消息中间件对比

一、JMS
1:先了解什么是JMS:JMS(Java Messaging Service)是Java平台上有关面向消息中间件(MOM)的技术规范,它便于消息系统中的Java应用程序进行消息交换,并且通过提供标准的产生、发送、接收消息的接口简化企业应用的开发,翻译为Java消息服务。

2:JMS消息通常有两种类型:
A: 点对点(Point-to-Point)。在点对点的消息系统中,消息分发给一个单独的使用者。点对点消息往往与队列(javax.jms.Queue)相关联。
B:发布/订阅(Publish/Subscribe)。发布/订阅消息系统支持一个事件驱动模型,消息生产者和消费者都参与消息的传递。生产者发布事件,而使用者订阅感兴趣的事件,并使用事件。该类型消息一般与特定的主题(javax.jms.Topic)关联。

二、开源消息中间件(ActiveMQ,Kafka)
1、ActiveMQ
A:完全支持JMS规范,号称最受欢迎,最为强大的消息中间件,尽管某些方面实际并不强大。。。
B:支持多种语言客户端:Java, C, C++, C#, Ruby, Perl, Python, PHP
C:支持消息集群,虚拟目的地,通配符,组合目的地等高级特性。
D:支持Spring
E:支持协议可插拔: in-VM, TCP, SSL, NIO, UDP, multicast, JGroups and JXTA transports
F:支持使用JDBC进行快速持久化(使用mysql实际也不快,支持约500次写入/每秒)
G:支持CXF,Axis,Ajax
H:消费者消费消息通过服务端推送方式进行,offeset由服务端维持
2、Kafka
A:它提供了类似于JMS的特性,但是在设计实现上完全不同,此外它并不是JMS规范的实现。
B:支持多种语言客户端:Java,Python,C,C++,.net,Ruby,Perl,PHP,Clojure,Go,Node.js等等
C:支持服务端和消费者集群;offset由消费者维护,可以通过控制offset控制对以前消息的消费;消息存储在磁盘,顺序读写,可以设置过期时间
D:支持分区,可以设置复制因子进行容灾,kafka自身主从复制机制可确保高可用
E:用户可自行实现分区路由规则,确保同类消息只落在某一个分区。
F:通过消费者集群设置可实现队列模式和发布-订阅模式,这种设计也便于灵活扩展和容灾
G:传统消息中间件在多消费者模型中无法很好的保证消费的顺序性,但kafka可以通过分区保证
H:kafka具有高吞吐,高可用,低延时的特性,7200r/s的磁盘可写100M/s
I:适用场景:页面浏览实时数据采集,实时监控,日志收集等
J:Offset可存储在zk或者kafka,如果网络异常有出现重复消费的可能性,需要开发者自行保证幂等性
K:kafka可以通过ACK确保不丢消息,但可能会带来消息的重复发送问题
L:kafka通过批量消息处理,零拷贝,端到端批量压缩等技术来提升效率
M:有较为健全的监控机制,可通过KafkaOffsetMonitor或者KafkaWebConsole监控。也可以通过JMX自定义进行自动监控。

posted @ 2015-12-15 10:13  sunney  阅读(1470)  评论(0编辑  收藏  举报