消息队列原理和选型:Kafka、RocketMQ 、RabbitMQ 和 ActiveMQ

供稿:hz-xin.com     日期:2025-01-17
消息队列中间件在面试中常被提及,重要性不言而喻。为何同事选择 RabbitMQ 而非 Kafka 或 RocketMQ?答案常是“因为公司用这个,大家都这么做”。本文将解答这一疑惑。

本文重点在于消息队列选型,而非每种队列的实现细节。以下为四种常用消息队列的简要介绍:Kafka、RabbitMQ、RocketMQ 和 ActiveMQ。

由于 ActiveMQ 在大规模吞吐场景中使用较少,本文主要介绍 Kafka、RabbitMQ 和 RocketMQ。

什么是消息队列?它是在消息传输过程中保存消息的容器,用于接收消息并以文件方式存储。一个消息队列可以被一个或多个消费者消费,包含以下三个元素:消息队列基础、消息队列模式、消息队列应用场景。

由于 ActiveMQ 5.x 的官方社区维护较少,在大规模吞吐场景中应用较少,本文将重点介绍 Kafka、RabbitMQ 和 RocketMQ。

Kafka 是 Apache Kafka 公司基于独特设计实现的一个分布式提交日志系统,成为 Apache 项目的一部分,被称为大数据的杀手锏。它是一个分布式的、支持多分区、多副本,基于 Zookeeper 的分布式消息流平台,同时也是一款开源的基于发布订阅模式的消息引擎系统。

一个典型的 Kafka 集群包含 Producer、broker、Consumer Group、Zookeeper 集群。Kafka 通过 Zookeeper 管理集群配置,选举 leader,以及在 Consumer Group 发生变化时进行 rebalance。Producer 使用 push 模式将消息发布到 broker,Consumer 使用 pull 模式从 broker 订阅并消费消息。

RocketMQ 是阿里开源的消息中间件,纯 Java 开发,具有高性能、高可靠、高实时、适合大规模分布式系统应用的特点。RocketMQ 对消息的可靠传输及事务性做了优化,目前在阿里集团被广泛应用于交易、充值、流计算、消息推送、日志流式处理、binglog 分发等场景。

RocketMQ 技术架构中有四大角色:NameServer、Broker、Producer 和 Consumer。Broker 用于存放 Queue,一个 Broker 可以配置多个 Topic,一个 Topic 中存在多个 Queue。

RabbitMQ 是使用 Erlang 语言开发的开源消息队列系统,基于 AMQP 协议实现。AMQP 的主要特征是面向消息、队列、路由、可靠性、安全。RabbitMQ 更多用在企业系统内,对数据一致性、稳定性和可靠性要求很高的场景。

消息队列对比及选型部分,将分别介绍 Kafka、RocketMQ 和 RabbitMQ 的优缺点,以及如何进行选型。

几种常见的消息队列介绍
分布式系统异步处理消息通知2. Kafka Kafka是一个高吞吐量、可扩展的分布式消息队列,使用Scala语言编写。它具有高可用性、容错能力强、数据处理性能高等优势,广泛应用于分布式系统、大数据应用等领域。Kafka的核心概念包括:发布订阅Kafka的基本原理是将消息存储在分布式日志文件中,实现高效率的消息传递。它将...

消息队列之zeroMQ、rabbitMQ、kafka
(3)Fanout exchange: 复制分发路由,原理是不需要routkey,当exchange收到消息后,将消息复制多份转发给与自己绑定的消息队列, 比如:消息生成者生成一个message(payload是1,routing key为苹果),两个binding(binding key分别为苹果、香蕉);exchange将消息分发给两个queue,两个消费者获得queue的消息; rabbiMQ如何保证消息...

常见消息队列 RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、MetaMQ...
RabbitMQ是基于AMQP协议实现的,可复用的企业消息系统,是当前最主流的消息中间件之一。RocketMQ出自阿里的开源产品,用Java语言实现,在设计时参考了Kafka,并做出了自己的一些改进。Apache Kafka是一个分布式消息发布订阅系统,性能高效、可扩展良好并且可持久化。这里列举了上述四种消息队列的差异对比:Active...

kafka与rabbitmq之间该如何进行选择?
RabbitMQ 提供了多种消息传递模式,包括发布-订阅模式、消息队列模式和广播模式,可以根据需求选择适当的模式。它支持多种协议,如 AMQP、STOMP 和 MQTT,使其能够与不同的应用程序和系统进行集成。【比较】在本文中,我们将对 Kafka、ZeroMQ 和 RabbitMQ 进行比较,并深入探讨它们的原理、架构和工作流程...

消息队列之 MetaQ 和 Kafka 哪个更香!
Kafka与MetaQ之对比 存储机制对比 - **Kafka**:采用topic为逻辑概念,partition为物理概念,每个partition对应一个log文件,存储生产数据,支持均衡分布数据到集群中的所有节点,确保负载均衡。- **MetaQ**:消息存储分为物理队列(commitlog)和逻辑队列(consumequeue)。commitlog在broker上顺序存储消息,...

Kafka,Mq和Redis作为消息队列使用
kafka是个日志处理缓冲组件,在大数据信息处理中使用。和传统的消息队列相比较简化了队列结构和功能,以流形式处理存储(持久化)消息(主要是日志)。日志数据量巨大,处理组件一般会处理不过来,所以作为缓冲层的kafka,支持巨大吞吐量。为了防止信息丢失,其消息被调用后不直接丢弃,要多存储一段时间,等...

消息队列的 6 种经典使用场景和 Kafka 架构设计原理详细解析
Apache Kafka 是一个分布式流处理平台,广泛应用于实时数据管道和流处理场景。其凭借高性能、低延迟、扩展性和可靠性,成为大数据生态系统中不可或缺的组件。消息队列作为进程间通信的桥梁,解决异步处理、应用耦合、流量削峰和负载均衡等问题。Kafka 作为消息队列,上游系统发送消息到中间件,下游系统从中获取...

消息队列黄金三剑客:RabbitMQ、RocketMQ和Kafka全面对决,谁是最佳选择...
消息队列的选择往往取决于特定的应用需求和场景。以下是RabbitMQ、RocketMQ和Kafka的对比分析:RabbitMQ,以其易用性和灵活性闻名,适用于对操作简便和快速响应时间有较高要求的场景。它自带的Web管理界面直观易用,允许用户监控和管理队列、交换机等关键组件。相比之下,RocketMQ专为大规模数据处理和高吞吐...

kafka的技术原理是什么?
MQ 消息队列作为广泛使用的中间件,关键特性包括解耦、异步、限流与削峰。Kafka,作为消息队列系统,具备与传统消息系统相似的功能,如系统解耦、冗余存储、流量削峰、缓冲、异步通信、扩展性和恢复能力。Kafka 还提供了难以实现的消息顺序性和回溯消费功能。在 Kafka 的架构中,Topic 与 Partition 是两个...

十道经典消息队列面试题
技术选型方面,Kafka、RocketMQ、RabbitMQ各有优缺点,选择需根据具体需求。消息中间件高可用依赖集群架构,通过副本机制和选举leader来保证。保证数据一致性,实现事务消息,确保消息发送成功后下游系统能够感知。设计消息队列架构,应考虑其基本结构、工作原理,从生产者、存储、消费等角度出发。