Kafka与ActiveMQ基础对比分析

以前只使用过kafka,最近因为工作的需要了解了一下ActiveMQ,这里把Kafka和ActiveMQ做了一些简单的对比,如果不对的地方,欢迎指正。


相同:Kafka和ActiveMQ都可以作为消息中间件来使用

使用中间件的主要作用可以分为:解耦,异步,消峰

使用中间件会带来的主要缺点:

1.系统可用性降低  

2.系统的复杂度提高

3.存在一致性问题

基本对比分析:

区别

Kafka

ActiveMQ

语言

Scala

Java,可在JVM上运行

可用性

非常高,分布式,多副本备份

高,基于主从架构实现的高可用性

Push/Pull模型

Kafka的consumer是通过pull方法来获取数据的

ActiveMQ可以根据consumer的获取消息是使用ActiveMQMessageConsumerreceive()还是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领域的功能极为完善

 

在别处看到了一个关于常用的中间的对比图,在这里也放出来给大家看看。

Kafka与ActiveMQ基础对比分析