认识
官网:https://rocketmq.apache.org/
文档:https://rocketmq.apache.org/docs/
仓库:https://github.com/apache/rocketmq
RocketMQ 是由阿里巴巴开发的分布式消息中间件系统,旨在处理大规模的消息传递场景。它是一种高性能、可伸缩且具有高可靠性的分布式消息队列引擎。RocketMQ 的设计目标是提供低延迟、高吞吐量和强顺序保证的消息传递。RocketMQ 是一个功能强大、可靠性高且具有良好可伸缩性的分布式消息中间件系统,适用于多种消息传递场景,并不断进行改进和演进以满足不断变化的需求。简而言之,RocketMQ 是个消息队列中间件。
组成
https://www.tencentcloud.com/document/product/1113/54443
Name Server(命名服务器):负责管理生产者、消费者和主题之间的路由关系,提供集群扩展和动态配置功能。
Broker(代理服务器):存储和传输消息的实际节点。它接收来自生产者的消息,并将其存储在磁盘上,同时将消息推送给订阅了相关主题的消费者。
Producer(生产者):负责发送消息到 Broker,将消息发布到指定的主题。
Consumer(消费者):从 Broker 订阅和拉取消息,按照指定的消费模式处理消息。
相对于 RocketMQ 的 Broker 集群,生产者和消费者都是客户端。
RocketMQ 可以令客户端找到 Name Server,然后通过 Name Server 再找到 Broker。
性质
高性能:RocketMQ 采用了异步、零拷贝等技术优化,以实现低延迟和高吞吐量的消息传递。
可靠性:RocketMQ 提供消息持久化机制,确保消息在发送、存储和传输过程中的可靠性。
可伸缩性:RocketMQ 支持分布式部署和水平扩展。通过增加 Broker 和 Name Server 节点,可以实现更高的容量和负载均衡。
消息顺序保证:RocketMQ 能够提供严格的消息顺序保证,确保相同 Key 或 Tag 的消息按照发送顺序进行消费。
权限控制(ACL):主要为 RocketMQ 提供 Topic 资源级别的用户访问控制。用户在使用 RocketMQ 权限控制时,可以在 Client 客户端通过 RPCHook 注入 AccessKey 和 SecretKey 签名;同时,将对应的权限控制属性(包括 Topic 访问权限、IP 白名单和 AccessKey 和 SecretKey 签名等)设置在 distribution/conf/plain_acl.yml 的配置文件中。Broker 端对 AccessKey 所拥有的权限进行校验,校验不过,抛出异常;ACL 客户端可以参考:org.apache.rocketmq.example.simple 包下面的 AclClient 代码。—— https://rocketmq.apache.org/zh/docs/4.x/bestPractice/04access/
构造
apache/rocketmq-operator: Apache RocketMQ Operator
on Kubernetes | with Helm Chart
https://artifacthub.io/packages/helm/rocketmq/rocketmq
https://github.com/itboon/rocketmq-helm
helm repo add rocketmq https://helm-charts.itboon.top/rocketmq
helm repo update rocketmq
helm search repo rocketmq/
helm pull rocketmq/rocketmq --version 3.0.3
helm show values ./rocketmq-3.0.3.tgz > rocketmq-3.0.3.tgz.helm-values.yaml
vim rocketmq-3.0.3.tgz.helm-values.yaml
... dashboard.ingress:
... nameserver.persistence.storageClass:
... broker.persistence.storageClass:
helm upgrade --install --namespace application-dependency --create-namespace \
rocketmq ./rocketmq-3.0.3.tgz -f rocketmq-3.0.3.tgz.helm-values.yaml
提供公网访问
[RocketMQ 5.1.4] 内外网隔离的情况下,怎么做到内外网都可以通过 MQ 收发消息 #7558
简而言之,需要修改 Broker 注册地址,使 Client 能够连接。
应用
异步消息:用于解耦和提高系统响应性,如日志收集、事件驱动架构等。
事务消息:支持分布式事务,确保消息的最终一致性。
流式处理:用于大规模数据流的处理和分析,如实时计算、数据传输等。
消息轨迹:支持对消息进行全链路追踪和监控,便于故障排查和性能优化。
… 15 Request doesn’t have field bname …
- https://github.com/apache/rocketmq/discussions/7919
- https://github.com/apache/rocketmq/pull/5161
- https://github.com/apache/rocketmq/releases/tag/rocketmq-all-4.9.5
以前,测试环境是 4.x 的,生产环境是 5.x 的,理论上应该保持一致。另外,我们用的是 k8s 环境, 4.x 在方面做的不好,只适合裸机部署。所以,就升级到 5.x 了,进而产生上述错误。
根据官方文档,5.x 是能兼容 4.x SDK 的。但是,代码里的 SDK 是 4.9.3 的,所以有这个问题。在 rocketmq-all-4.9.5 修复的该问题。
所以,要么升级 SDK 版本,要么回退服务版本,最后,我们选择回退服务版本。
改进
近年来,RocketMQ 不断进行改进和演进,包括以下方面:
社区贡献:RocketMQ 是一个开源项目,拥有活跃的社区贡献者和开发团队。社区不断改进和优化 RocketMQ 的功能、性能和稳定性。
集成其他生态系统:RocketMQ 积极与其他开源项目和产品进行集成,如与 Apache Storm、Apache Flink 等大数据处理框架的结合。
云原生支持:为了适应云原生应用的需求,RocketMQ 提供了 Kubernetes Operator、Serverless 等特性,简化了在云环境中的部署和管理。
性能调优:RocketMQ 团队致力于提升其性能,通过改进各个组件和算法,以及优化网络 IO、存储等方面,以提供更好的性能和可伸缩性。