activemq和kafka的区别

作者:大宽宽
链接:https://www.zhihu.com/question/272186518/answer/367644663
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 

Active MQ被称为“传统”mq。所谓“传统”是指,

  1. 他要支持一些标准接口,比如AMQP, STOMP等
  2. 需要维护consumer的状态。即当前consumer读到哪个数据了,是active mq来维护的。
  3. active mq最早用来做企业级别的系统整合。要支持所谓的“企业级队列模式“,但请原谅我搞到最后也没理解这个企业级到底怎么企业级了,也许现在的大多数企业早已不像10多年前那样设计系统了?
  4. active mq因为支持XA协议,所以可以和JDBC一起实现2PC分布式事务,但我基本没见过有人这么用,大概是因为太慢和太难维护的原因。
  5. active mq支持对事物处理的commit(自动+手动),但是如果你理解分布式一致性的话就能明白单一系统能够commit还是无法满足一致性的要求

其实我看到过有人用它,完全是因为他是java这个圈子里第一个广泛被使用的mq(之后又有rabbit mq),是一种习惯。

而Kakfa一开始被设计就是以高吞吐+高性能+HA来实现的。我的压测显示Kafka的吞吐量大概高于active mq两个数量级。即使Kafka配置了全同步的复制,也会比Active MQ高5~6倍。

Kafka的核心设计是append log file。即不断追加写log文件来实现消息数据的写入(对比一下,active mq的内部更偏向一个传统数据库,不过active mq最近的版本开始用level db)。磁盘追加写的性能要远高于随机写。Kafka允许consumer自己维护自己读取到了的位置,还允许随时调整这个位置做“message replay”。

Kafka围绕topic和partition的模型解决了message的分发和HA的问题,并且能够通过配置来支持全异步,半同步,全同步的复制。

最近Kafka提供了一个新的Stream API,顺便还支持了事务(但限制在数据处理这个步骤)

总体来讲Kafka特别适合的场景是实时数据分析,log分析等场景。但是如果用来做业务事件的分发,也非常适合。

如果业务场景压力不大,又比较传统,需要那些老的message协议,用Active MQ完全够用,但同时也可以考虑一下同类的Rabbit MQ;但是如果吞吐量的要求很大,那么Kafka几乎可能是自研之外,非常理想的选择了。

                                                                      需要更多教程,微信扫码即可

                                                                              

                                                                                         👆👆👆

                                                        别忘了扫码领资料哦【高清Java学习路线图】

                                                                     和【全套学习视频及配套资料
 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值