消息中间件对比
2015-12-15 10:13
369 查看
一、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自定义进行自动监控。
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自定义进行自动监控。
相关文章推荐
- 位运算总结2:利用位运算实现加法
- [Java] 集合类克隆方法与内部排序
- 高性能Java网络框架 MINA
- Restrictions的部分用法
- 用wireshark抓包分析tcp
- Implement Trie (Prefix Tree)
- 服务治理过程演进
- [LINK]Gulp网站
- python入门
- 警告: [SetContextPropertiesRule]{Context} Setting property 'source' to 'org.eclipse.jst.jee.server:esignmanage' did not find a matching property.解决
- 使用Xcode查找项目中的中文字符串
- 实现WebView的免登陆
- Linux下怎样搭建 SVN 服务器
- “互联网+”4大新趋势突破企业“寒冬”之困
- 显著性检测综述
- android 保存bitmap到SD卡
- Android缓存处理和清除数据、清除缓存、一键清理的区别
- input内的文件水平剧中和垂直居中
- 为什么安卓没有IOS流畅?看完你就明白了
- 关于jQuery新的事件绑定机制on()的使用技巧