---
layout: post
title: 常见 MQ 的比较 - Kafka、RocketMQ、RabbitMQ的优劣势比较
category: 技术
tags: Kafka
keywords:
description:
---
{:toc}
## MQ 的作用
1. 解耦
2. 最终一致性
3. 广播
生产者和消费者互相不用关心。
4. 错峰和流控
秒杀场景
## kafka、RocketMq、RabbitMq 比较
|特性| kafka|RocketMq|RabbitMq|ActiveMq|
|---|---|---|---|---|
|开发语言|scala|java|erlang|java|
|单机吞吐量|10w 级|10w 级|1w 级|1w 级|
|时效性|ms 级内|ms 级内|us 级|ms级|
|可用性|非常高(分布式架构)|非常高(分布式架构)|高(主从架构)|高(主从架构)|
|功能特性|只支持主要 Mq 功能。大数据领域应用广|MQ 功能比较完备,扩展性佳|并发能力很强,性能极好,延时很低,管理界面丰富|成熟的产品,很多公司在用。各协议支持好。mq 功能极其完备|
|优势|1. 单机 TPS 百万级
2.优秀的管理界面 kafka-mamager
3. 应用于实时计算和日志采集|1. 支持 10 亿级消息堆积,不影响性能。
2. 源码为 java,可定制,易读懂
3. 参数优化后,消息零丢失。
4. 支持分布式事务|1. 基于 erlang,性能好,高并发
2. 社区活跃
3. 文档齐全|1. mq领域功能极其完备|
|缺陷|1. kafka 单机超过 64 分区,load 会飙高。
2.使用短轮询方式,实时性取决于轮询间隔时间。
3.消费失败不支持重试.
|1. 客户端支持语言不多
2. 社区活跃度一般。
3.没有实现 JMS 接口,有些系统迁移改动大|1.erlang 开发。代码较难看懂
2. 吞吐量相对较低,因为实现机制比较重。
3.学习维护成本高|关房对 ActiveMq5.x 维护渐少,较少在大吞吐量规模使用|
|应用场景|基于 PULL 模式处理消息消费,追求高吞吐量。大公司建议使用|为金融互联网领域而生,对可靠性要求很高的场景。经过双 11 的洗礼,稳定性更可靠。|并发性好,功能完备,社区活跃度高,快速解决 bug。不利于二次开发。适合于数据量不那么大的公司||