Kafka与ActiveMQ基础对比分析
以前只使用过kafka,最近因为工作的需要了解了一下ActiveMQ,这里把Kafka和ActiveMQ做了一些简单的对比,如果不对的地方,欢迎指正。
相同:Kafka和ActiveMQ都可以作为消息中间件来使用
使用中间件的主要作用可以分为:解耦,异步,消峰
使用中间件会带来的主要缺点:
1.系统可用性降低
2.系统的复杂度提高
3.存在一致性问题
基本对比分析:
区别 |
Kafka |
ActiveMQ |
语言 |
Scala |
Java,可在JVM上运行 |
可用性 |
非常高,分布式,多副本备份 |
高,基于主从架构实现的高可用性 |
Push/Pull模型 |
Kafka的consumer是通过pull方法来获取数据的 |
ActiveMQ可以根据consumer的获取消息是使用ActiveMQMessageConsumer的receive()还是MessageListener接口来接收消息,前者是使用pull获取,后者使用push方式,在使用该方式的时prefetch limit设置必须大于0 |
存储接口 |
Kafka使用的是文件存储,而且这些文件是顺序存储的 |
ActiveMQ的消息持久化机制有JDBC,KahaDB和LevelDB |
单机吞吐量 |
Kafka的吞吐量非常大,可以达到10万级 |
ActiveMQ的吞吐量相对kakfa 较弱,万级,写入和读取message性能太低 |
消息传递模型 |
Kafka提供了一个消费组的概念,一个消息可以多个消费组消费,但还只能被消费中的一个消费者消费,这样当只有一个消费组的时候就是相当于P2P模型,而当有多个消费组时就相当于PUB/SUB模型,而且极小几率会发生一条信息多次发生的情况 虽然单个分区是有序的,但是多个分区之间是无序的 |
P2P,PUB/SUB(发布/订阅) |
功能支持 |
功能较为简单,主要支持简单的MQ功能,在大数据领域的实时计算以及日志采集被大规模采用 |
MQ领域的功能极为完善 |
在别处看到了一个关于常用的中间的对比图,在这里也放出来给大家看看。