赞
踩
1、功能方面
1)Kafka可以认为是简单的用文件实现了队列的功能, 消息按顺序存储在文件中(写入磁盘), 需要消费者自己去记录当前读取到了哪个位置。
2)Rabbitmq则实现了多种类型的exchange, 多种类型的消息,既可以实现持久化存储(写入磁盘), 又可以实现非持久化存储(写入内存),还有ack机制,支持事务, 还提供了web界面直观的看到各种exchange、queue的情况,及其读写、并发等实时数据。
3)Kafka主要使用pull的方式进行消费,而rabbitmq则pull和push都实现了。
4)正因为kafka功能简单, 而rabbitmq功能复杂强大, 所以kafka更容易上手。
2、性能方面
Kafka的吞吐量更高, 主要有
1)Zero Copy机制,内核copy数据直接copy到网络设备,不必经过内核到用户再到内核的copy,减小了copy次数和上下文切换次数,大大提高了效率。
2)磁盘顺序读写,减少了寻道等等的时间。
3)批量处理机制,服务端批量存储,客户端主动批量pull数据,消息处理效率高。
4)存储具有O(1)的复杂度,读物因为分区和segment,是O(log(n))的复杂度。
3、可靠性方面
Rabbitmq有ack、事务等, 可靠性更高, 而kafka仅仅在消费者端保存了一个offset记录消费情况, 很容易出现多次消费的情况, 需要在逻辑层保证消费的幂等性
4、使用场景
Kafka本身具有较高的吞吐量, 可以对数据进行存储, 适合在对消息可靠性要求不高的场景下做缓冲(比如日志系统)。
Rabbitmq则功能更强大,但是并发和缓冲能力不如kafka, 适合在对可靠性和实时性要求高的情况下使用。另外目前还有不少rpc框架支持rabbitmq(比如直播、转账等) 。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。