前言
常用的分布式消息队列包括Kafka、RocketMQ、RabbitMQ、ActiveMQ,本文简要介绍其中这4个分布式消息队列,以及先侧重Kafka的关键原理。
分布式消息队列
下面是常用的分布式消息的简介。
消息队列Name | Kafka | RocketMQ | RabbitMQ | ActiveMQ |
开源地址 | https://github.com/apache/kafka | https://github.com/apache/rocketmq | https://github.com/rabbitmq/rabbitmq-server | https://github.com/apache/activemq |
简介 | LinkedIn贡献 | 阿里贡献 | LSHIFT贡献 | Apache开源 |
协议 | 自有协议 | 自有协议 | AMQP、MQTT等 | AMQP、Jakarta Messaging3, JMS2、MQTT等 |
开发语言 | Java,Scala | Erlang | Java | Java |
客户端语言 | Java、C/C++、Go、Python、Nodejs等社区贡献,参考 | Java,C++,Go,Python,Nodejs等 | Erlang,Java等 | Java、C、C++、Python等 |
推拉模式 | pull | Push/Pull | Push/Pull | Push/Pull |
性能 | 十万级吞吐量 | 十万级吞吐量 | 万级吞吐量 | 万级吞吐量 |
Kafka原理
一张图示意Kafka原理:
组件/概念 | 说明 |
Producer | 消息生产者。发布消息到Kafka broker |
Consumer | 消息消费者。向Kafka broker读取消息。 |
Topic | 消息分类,生产和消费消息都需指定消息的Topic。 |
Broker | Kafka集群包含一个或多个服务器,这种服务器被称为broker。broker端不维护数据的消费状态,提升了性能。直接使用磁盘进行存储,线性读写,速度快。 |
Partition | Parition是物理上的概念,每个Topic包含一个或多个Partition,对个Partition时其中一个Leader,多个Follower副本,一般一个消息的主副Partition挂到不同Broker。每个Consumer在一个消费分组连接1个主Partition进行消费。 |
Consumer Group | 每个Consumer属于一个特定的Consumer Group(可为每个Consumer指定group name,若不指定group name则属于默认的group) |