RocketMQ简介

前言

本文仅仅用作RocketMQ的简单介绍,仅仅包含RocketMQ的起源,特点等基础信息。

什么是RocketMQ

Apache RocketMQ 是一个开源的分布式消息中间件系统,最初由阿里巴巴集团开发并捐赠给 Apache 软件基金会,成为 Apache 顶级项目。RocketMQ 最早于 2012 年开始在阿里巴巴内部使用,并于 2016 年成为 Apache 顶级项目。以下是其简要发展史:

  • 起源: RocketMQ 最早起源于阿里巴巴集团内部,作为其消息中间件的解决方案。最初是为了满足大规模分布式系统下的高吞吐量、低延迟和高可靠性的消息传递需求。

  • Apache 孵化: 在经历了一段时间的内部发展和测试之后,阿里巴巴将 RocketMQ 作为开源项目捐赠给了 Apache 软件基金会。随后,RocketMQ 进入 Apache 孵化器,并于 2016 年成为了 Apache 顶级项目。

  • 功能特点: RocketMQ 提供了高可用、高性能、低延迟的分布式消息传递服务。它支持消息的事务性处理、顺序消息传递、多队列模型等特性,同时具备良好的可伸缩性和扩展性,能够满足大规模分布式系统的消息通信需求。

  • 持续发展: 作为一个 Apache 顶级项目,RocketMQ 持续得到开源社区的贡献和支持。它不断地进行功能增强、Bug 修复以及性能优化,同时还提供了多种客户端语言的支持,如 Java、C++、Go 等。

这里的Rocket意为火箭,表示速度很快MQ指的是Message Queue(消息队列)

消息
这里的消息指的是:Rocket中的最小的数据单元

可能是文本、JSON、XML 或二进制数据等形式,包含了系统间通信所需的信息

什么是MQ(消息队列)

消息队列(Message Queue)是一种通信模式,用于在分布式系统中进行异步通信。它允许不同的组件或应用程序在系统之间发送消息,而无需立即知道接收方的状态或立即处理该消息消息队列通常由消息中间件支持,用于提供异步通信解耦合的能力。

主要特点包括:

  1. 异步通信: 发送方将消息放入队列,而接收方稍后从队列中接收和处理消息。这种异步通信模式可以降低系统的耦合性,允许独立的部分并行工作,并提高系统的灵活性和可扩展性。

  2. 解耦合: 发送方和接收方不需要直接相互通信,它们通过共享的队列进行消息传递。这种解耦合的方式允许系统中的不同部分独立进行操作,而不会受到其他部分状态或性能的影响。

  3. 持久化: 消息通常会被持久化,以防止数据丢失。即使接收方当前不可用,消息也会被保存在队列中,直到接收方准备好处理它们为止。

  4. 消息分发: 消息队列允许多个接收方订阅相同的消息,并进行消息分发,使得多个接收方能够同时获取并处理相同类型的消息。

消息队列可以帮助处理大量的消息传递,提供一种弹性、高效且可靠的通信方式,从而支持系统的稳定性和性能

RocketMQ能做什么

  1. 消息传递: 支持可靠、快速消息传递。它允许在分布式系统中发送和接收消息,用于实现异步通信、系统集成和解耦合。

  2. 高可用性和可靠性: 提供高可用性和数据可靠性。消息被持久化存储,即使在发生故障时也不会丢失

  3. 高性能: 能够实现高吞吐量和低延迟的消息处理。它适用于处理大量消息以及对低延迟和高性能有要求的场景。

  4. 顺序消息传递: 能够保证消息按照发送的顺序进行传递和处理,这对于需要特定顺序的应用场景非常重要。

  5. 分布式部署: 能够实现分布式部署,支持横向扩展,以便更好地应对大规模系统的需求。

  6. 灵活性: 提供多种消息模式和特性,包括发布/订阅模式、点对点模式、事务消息等,能够适应不同的应用场景和需求。

  7. 监控和管理: 提供丰富的监控和管理功能,帮助用户监视系统状态、消息流和性能指标。

现被广泛应用于金融、电商、物流等领域,用于异步通信、日志采集、实时计算等多种场景。

常见MQ产品及其优缺点

以下是一些常见的MQ系列产品及其主要优缺点

RocketMQ

优点

  • 单机吞吐量可达十万级,可以支持大规模的消息堆积和处理
  • 可用性非常高分布式架构,支持主从同步和异步复制,以及容灾切换
  • 消息可靠性高,经过参数优化配置,可以做到零消息丢失
  • 功能支持丰富,支持发布/订阅、请求/响应、事务消息、顺序消息、延时消息等。
  • 源码是Java语言,易于阅读和定制,有阿里品牌保障。
  • 支持大量的topic数量不会影响吞吐量和性能

缺点

  • 社区活跃度一般文档相对简单,更新频率较低。
  • 接口不是按照标准JMS规范走的,迁移成本较高
  • 需要较多的机器资源部署和运维相对复杂

Kafka

LinkedIn开源的一个分布式的提交日志系统,主要用于大数据的实时处理和日志收集,具有超高的吞吐量、低延迟、高可用性和可扩展性等特点。

优点

  • 单机吞吐量可达十万级,适合高并发和海量数据的场景。
  • 时效性低至毫秒级,支持实时的数据分析和处理
  • 可用性非常高少数机器宕机不会丢失数据和影响可用性
  • 功能相对简单,主要支持简单的MQ功能,易于使用和集成。
  • 分布式可以任意扩展,支持在线水平扩展。

缺点

  • topic数量对吞吐量有较大的影响,同等机器下,topic越多,吞吐量越低,需要增加更多的机器资源。
  • 消费者采用短轮询方式,实时性取决于轮询间隔时间,可能导致消息重复消费或者延迟消费
  • 不支持消息顺序,如果一台代理宕机,就会产生消息乱序的情况。
  • 不支持消息过滤,只能根据topic进行订阅,需要消费者自己处理不感兴趣的消息。
  • 社区更新较慢,存在一些已知的bug和性能问题。

RabbitMQ:

一个基于AMQP协议的可复用的企业消息系统,主要用于解耦和异步的场景,具有高性能、低延迟、高可用性和丰富的功能等特点。

优点

  • 单机吞吐量可达万级,性能较好,高并发。
  • 时效性低至微秒级,延迟最低,适合实时性要求高的场景。
  • 可用性高,基于主从架构实现高可用性,支持集群和镜像模式。
  • 消息可靠性高,支持事务和持久化,可以做到零消息丢失。
  • 功能支持丰富,支持多种消息模式,如发布/订阅、路由、主题、远程过程调用等。
  • 支持多种语言客户端,如Java、Python、Ruby、.NET等。
  • 开源提供的管理界面,易于使用和监控。
  • 社区活跃度高,更新频率高,文档齐全,问题容易解决。

缺点

  • 吞吐量相对较低,不适合大数据量的场景。
  • 集群动态扩展比较麻烦,需要手动添加或删除节点。
  • 源码是Erlang语言,难以阅读和定制,依赖于社区的维护和修复。
  • 需要学习比较复杂的接口和协议,学习和维护成本较高。

ActiveMQ(很少用到了)

Apache旗下的一个老牌的消息中间件,主要用于解耦和异步的场景,具有高可用性、高可靠性和丰富的功能等特点。

优点

  • 单机吞吐量可达万级,性能较好,高并发。
  • 时效性低至毫秒级,适合实时性要求较高的场景
  • 可用性高,基于主从架构实现高可用性,支持集群和网络连接器模式。
  • 消息可靠性高,支持事务和持久化,有较低的概率丢失数据。
  • 功能支持丰富,支持多种消息模式,如发布/订阅、点对点、请求/响应等,以及多种传输协议,如TCP、UDP、HTTP等。
  • 支持多种语言客户端,如Java、C#、C++等。
  • 源码是Java语言,易于阅读和定制。
  • 在业内有很多的应用案例和经验,问题容易解决。

缺点

  • 吞吐量相对较低,不适合大数据量的场景。
  • 社区活跃度较低,更新频率较低,存在一些已知的bug和性能问题。
  • 集群动态扩展比较麻烦,需要手动添加或删除节点。
  • 接口和协议比较复杂,学习和维护成本较高。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值