大数据生态的Apache RocketMQ5.0

本文深入探讨Apache RocketMQ5.0的特性,包括多副本机制、ACL鉴权、事务消息和Request-Reply模式。介绍了RocketMQ的集群搭建流程、生产消费模型、生态项目以及数据流构建。RocketMQ5.0实现存储计算分离,提供轻量级客户端,支持事件、流处理,并在工业互联网领域展现出广阔的应用前景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文作者:李伟 - Apache RocketMQ Committer,RocketMQ Python客户端项目Owner ,Apache Doris Contributor,腾讯云消息队列资深开发工程师,著有《RocketMQ分布式消息中间件(核心原理与最佳实践)》。

一、RocketMqueue101

RocketMQ拥有诸多出色的特性:

比如多副本机制,RocketMQ支持存储层的多副本Dledger,它是基于 Raft 协议的一致性存储库,保证能够从存储层实现多副本;

比如ACL 鉴权机制,用于确定哪些 producer 能生产、哪些消费者组能消费,以及服务端的消息过滤;

比如事务消息,它是 RocketMQ 实现的生产者事务,生产者向 broker 发送一条事务消息,由生产者执行本地事务。如果执行成功,则向 broker 端发送 commit 事件,消费者才能消费;如果本地事务处理失败,则发送rollback事件,使消费者无法消费该消息。

比如Request-Reply ,它是类似于同步 RPC 调用的过程,用户相同的逻辑用消息来实现,能够实现同步 RPC 调用的过程,可以将调用API和发送消息两套逻辑进行统一。

广播消息指消息发出后,订阅它的所有消费者都能消费到所有实例。负载均衡消费指默认策略下,同一个消费者组的消费者都能平均地消费消息,具体策略可自行调整。RocketMQ支持Pull、Push和Pop三种消费模式,支持java、go、cpp、python、c#等多种语言。

搭建RocketMQ集群的流程如下:

第一步:安装NameServer集群。NameServer集群包含一个或多个NameServer节点。启动服务时,默认监听 9876 端口。NameServer集群搭建好之后,启动一套Broker集群。

第二步:搭建Broker集群,使用经典master-slave部署模式, master 提供读写,同时会将数据存储和元数据同步一份到 slave 。通过 10912 的 HA 端口做数据同步。

第三步:写生产者代码生产。生产者集群包含多个生产者实例,通过 broker 的 10911 和 10909 端口向 broker 发送数据。

第四步:消费者通过 10911 或10909端口向 broker 拉取数据。

生产者或消费者实例启动时,会先配置NameServer地址,由生产者或消费者从NameServer集群上拉取topic、Queue和Broker等路由信息,然后根据路由信息发送或拉取消息。

生产者和消费者均与broker之间存在 channel 连接。如果生产者或消费者长时间没有与 broker 联系,则 broker 会将连接剔除。

以下为RocketMQ101相关名词解析:

生产者包含生产者组和生产者实例。生产者组是若干个生产者实例的组合,且RocketMQ希望同一个生产者组内的实例行为一致。消费者组和消费者实例也同理。行为一致指生产者实例都生产同一种类型的消息,比如都生产订单消息

### Apache RocketMQ 5.0 文档与使用指南 #### 安装与配置 为了安装和配置 Apache RocketMQ 5.0,建议访问官方文档获取详细的指导。通常情况下,RocketMQ 的部署涉及 NameServer 和 Broker 的设置。NameServer 是无状态的服务节点,Broker 负责存储消息并提供发送接收功能。 对于初次使用者来说,可以从下载页面获得最新版本的二进制包,并按照快速入门指南完成基本环境搭建[^4]。 ```bash tar -zxvf rocketmq-all-5.0.0-bin-release.zip cd rocketmq-all-5.0.0-bin-release/bin nohup sh mqnamesrv & nohup sh mqbroker -n localhost:9876 & ``` 这段脚本展示了如何解压文件以及启动 NameServer 和 Broker 实例。 #### 发送与消费消息 在成功设置了 RocketMQ 后,可以利用 Java SDK 或者其他支持的语言客户端来实现消息生产和消费逻辑。下面是一个简单的例子展示怎样通过 Java API 来向指定主题发布一条消息: ```java // 创建生产者实例并指定组名 DefaultMQProducer producer = new DefaultMQProducer("please_rename_unique_group_name"); producer.setNamesrvAddr("localhost:9876"); // 初始化生产者 producer.start(); for (int i = 0; i < 100; i++) { try { // 创建消息对象,定义目标 Topic, Tag 和具体的内容体 Message msg = new Message( "TopicTest", // topic "TagA", // tag ("Hello RocketMQ " + i).getBytes(RemotingHelper.DEFAULT_CHARSET) // body ); SendResult sendResult = producer.send(msg); System.out.printf("%s%n", sendResult); } catch (Exception e) { e.printStackTrace(); } } // 关闭生产者连接 producer.shutdown(); ``` 此代码片段说明了创建一个生产者、初始化它并向特定的主题发送多条消息的过程。 #### 高级特性 除了基础的消息传递外,Apache RocketMQ 还提供了诸如事务型消息、顺序消息等功能以满足不同应用场景下的需求。这些高级特性的详细介绍可以在官方文档中找到相应的章节进行深入学习[^4]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值