Kafka采用拉取(pull)方式消费消息,吞吐量相对更高,适用于海量数据收集与传递场景,通常用于日志采集和集中分析。
RabbitMq在吞吐量方面略有逊色,但支持更多的消息队列功能。
RocketMQ出自 阿里公司的开源产品,用java语言实现。在设计时参考了Kafka,并且做出了自己的一些改进。在阿里集团被广泛应用于订单、交易充值、消息推送、日志流式处理、binglog分发等场景。
以下分别从性能、数据可靠性、服务可用性、功能等方面进行具体分析
性能:
QPS:吞吐量 Broker:服务器
消息中间件的性能主要衡量吞吐量,Kafka的吞吐量比RabbitMq要高出1~2个数量级,RabbitMq的单机QPS在万级别,Kafka的单机QPS能够达到百万级别。RocketMq单机写入TPS单实例约7万条/秒,单机部署3个Broker,可以跑到最高12万条/秒,消息大小10个字节,Kafka如果开启幂等、事务等功能,性能也会有所降低。
TPS:每秒的事务数量
幂等性:由于Producer在生产发送消息时,难免会重复发送消息。Producer进行retry时会产生重试机制,发送消息重复。而引入幂等性后,重复的消息只会生成一条有效的消息。
kafka的事务:与数据库的事务类似,Kafka中的事务属性是指一系列的Producer生产消息和消费消息提交Offsets的操作在一个事务中,即原子性操作,对应的结果是同时失败或者同时成功。操作数据库中的事务指一系列的增删改查,对Kafka来说&#x