rocketmq是什么语言写的 rocketmq是什么

RocketMQ 是阿里巴巴 2012 年开源分布式新闻中间件已捐赠给年开源分布式新闻中间件 Apache 基金会,并入 2022 年 11 月变成 Apache 孵化项目 。

rocketmq是什么语言写的 rocketmq是什么

文章插图
中间件是一种连接软件组件和应用的计算机技术,包括一组服务 。以便通过网络在一个或多个设备上运行的多个软件进行交互 。中间件技术提供了相互操作,促进了分布式系统架构的演变,通常用于应用和简化这些复杂的分布式应用程序,包括 web 服务器、事务监控和消息队列软件 。
中间件(middleware)它是一个主要的基础软件类别,属于可重用软件的范围 。顾名思义,中间件位于操作系统软件和用户的应用软件之间 。中间件在操作系统、网络和数据库之上,应用软件的下层,总体作用是为上层应用软件提供操作和开发环境,帮助人们轻松有效地开发和集成复杂的应用软件 。
中间件是平台(硬件和操作系统)与应用程序之间的通用服务,具有标准的程序接口和协议 。对于不同的操作系统和硬件平台,中间件可以满足各种接口和协议规范 。
RocketMQ 它是一个分布式消息中间件 。所以,RocketMQ 关键是解决哪些问题?
(1)Publish/Subscribe
公布和定阅是消息中间件最基本的功能,也是与传统相比的 RPC 通讯来讲 。
(2)Message Priority
规范中描述的优先事项是指在消息队列中,每个信息都有不同的优先事项 。一般来说,优先事项是用整数表示的 。如果信息完全在内存序列中,则可以在交付前按优先级排序,使优先事项先交付 。
因为 RocketMQ 所有的信息都是持久的,所以如果按优先级排列,成本会很大,所以成本会很大,所以 RocketMQ 信息优先没有特别适用,但类似的效果可以通过灵活的方式实现,即独立配备优先顺序和普通优先顺序,将不同的优先级发送到不同的序列 。
(3)Message Order
有序的信息是指一种信息购物,可以按照推送顺序消费 。例如:一个订单形成了 3 信息是订单建立、订单支付和订单完成 。购物时,按照这个顺序消费是有意义的 。但同时,订单可以并行消费 。
RocketMQ 能严格保证信息有序 。
(4)Message Filter
①Broker 端信息过虑
在 Broker 中,依照 Consumer 过度考虑的要求,优点是减少了针对性 Consumer 无用信息的数据传输 。缺点是增强了数据传输 。Broker 压力,完成比较复杂 。
②Consumer 端信息过虑
这种过度考虑的方法可以通过使用完全自定义来完成,但缺点是很多无用的信息需要传输到 Consumer 端 。
(5)Message Persistence
消息中间件一般采用几种持久方法:
①持久化到数据库,比如 Mysql 。
②持久化到 KV 存放,比如 levelDB、伯克利 DB 等 KV 存储系统 。
③持久的文档记录方式,如 Kafka,RocketMQ
④对内存数据进行持久镜像,如 beanstalkd,VisiNotify
⑤前三种持久化方法都有内存序列 Buffer 扩展能力,第四种方法只是内存镜像,效果是当 Broker 重启后仍可修复以前内存的数据 。
RocketMQ 充分利用 Linux 文件系统内存 cache 提高性能 。
(6)Message Reliablity
影响信息可靠性的几种情况:
①Broker 正常关掉;
②Broker 异常 Crash;
③OS Crash;
④设备断电,但能立即恢复供电状况 。
⑤设备无法启动(可能是因为设备无法启动 cpu、主板、内存等主要设备损坏)
⑥硬盘设备损坏 。
前四种情况属于硬件平台可立即恢复状态,RocketMQ 在这四个前提下,可以保证信息不丢失,或者丢失少量数据(刷盘是同步还是异步) 。
后两种情况属于单点故障,无法修复,一旦发生,此点上的信息全部丢失 。RocketMQ 在这两种情况下,根据异步复制,可以保证 99%的消息没有丢失,但仍有少量的消息可能丢失 。根据同步双写技术,可以避免点击 。同步双写肯定会影响特性,适合对信息稳定性要求很高的地方,比如 Money 相关应用 。
RocketMQ 从 3.0 版本开始适用于同步双写 。
(7)Low Latency Messaging
在信息不沉积的前提下,信息到达 Broker 之后,可以马上到达 Consumer 。RocketMQ 应用长轮询 Pull 方法可以保证信息非常即时,信息的实用性不少于 Push 。
(8)At least Once
这意味着每个信息必须发送一次 。RocketMQ Consumer 先 pull 消息到当地,消费结束后,才回到服务器 ack,如果没有消费,就不会有 ack 信息,因此 RocketMQ 能很好地适用这一特点 。
(9)Exactly Only Once
①在发送信息的阶段,不能推送重复的信息 。
【rocketmq是什么语言写的 rocketmq是什么】②在消费信息阶段,不能重复消费信息 。
只有在满足上述两个标准的前提下,我们才能认为消息是“”Exactly Only Once要实现以上两点,在分布式架构条件下,难免会产生巨大的成本 。因此 RocketMQ 为了追求高性能,并不能保证这一特点,规定在业务上进行去重,换句话说,消费信息要做到幂等性 。RocketMQ 虽然不能严格保证不重复,但通常很少有反复推送、消费,只有网络异常,Consumer 在起停等异常情况下,会有反复的信息 。
(10)Broker 的 Buffer 难题
Broker 的 Buffer 一般是指 Broker 一个序列的内存 Buffer 尺寸,这种 Buffer 一般尺寸有限 。
此外,RocketMQ 没有内存 Buffer 概念,RocketMQ 序列为持久硬盘,定期清除数据 。RocketMQ 同其他 MQ 有非常显著的差异,RocketMQ 的内存 Buffer 抽象成一个无尽长度的序列,无论有多少数据可以放下,这个无尽是有前提的,Broker 定期删除过期数据,如 Broker 只储存 3 每天的信息,那么这个 Buffer 尽管长短无尽,可是 3 前几天的数据可以从队尾删除 。
(11)回复消费
回朔消费是指 Consumer 已经消费成功的消息,因为业务需要重新消费,要适用这个功能,Broker 在向 Consumer 成功发送信息后,信息仍需保存 。而且再消费一般是按照时间维度进行的,比如因为 Consumer 系统异常,恢复后需要重新消费 1 小时前的数据,那么 Broker 为了提供一个系统,可以根据时间维度来回退消费进度 。
RocketMQ 适用于按时间追溯消费,时间维度准确到ms,可以向前回复,也可以向后回复 。
(12)信息积累
消息中间件的主要功能是异步解耦,另一个关键功能是阻挡前端数据洪峰,确保后端系统的稳定性,这就要求消息中间件具有一定的消息积累能力 。消息积分有以下两种情况:
①内存中积累了新闻 Buffer,一旦超过内存 Buffer,可以根据一定的丢失对策丢失信息,比如 CORBA Notification 规范中的描述 。适合能够容忍丢失信息的项目 。在这种情况下,消息沉积的能力主要在于内存 Buffer 在大小和消息积累之后,性能不会下降太多,因为内存中的数据对外界提供的浏览能力有限 。
②消息堆积在持久存储系统中,如 DB,KV 存储,文档记录方式 。当信息不能存储在内存时 Cache 命中时,要不可避免地浏览硬盘,会产生大量的阅读 IO,读 IO 货运量直接决定了消息积累后的浏览能力 。
评价信息积累能力主要有以下四点:
有多少条信息可以沉积,有多少字节?也就是说,信息的沉积量 。
消息堆积后,发送信息的货运量会不会受到沉积的影响?
消息积累后,正常消费 Consumer 会不会受到影响?
消息堆积后,浏览堆积在硬盘上的消息时,货运量有多大?
(13)分布式事务
已知的几个分布式事务规范,如 XA,JTA 等 。其中 XA 该规范得到了各大数据库厂商的广泛支持,如 Oracle,Mysql 等 。其中 XA 的 TM 完成领导者如 Oracle Tuxedo,广泛应用于金融、电信等领域 。
分布式事务涉及两个阶段的提交问题,必须在文件存储层面 KV 存储的适用性,由于第二阶段提交回滚必须修改信息,必须涉及基础 Key 去搜索 Message 动作 。RocketMQ 第二阶段绕过依据 Key 去搜索 Message 选择第一阶段推送的问题 Prepared 当你得到消息时,你得到了消息 Offset,第二阶段依据 Offset 浏览信息并修改状态,Offset 是数据的地址 。
RocketMQ 这种完成事务的方法不能通过 KV 存放做,而是用 Offset 方法有一个明显的缺点,即通过方法,有一个明显的缺点 Offset 更改数据,会使系统的脏页过多,必须特别注意 。
(14)按时信息
按时信息是指信息发送到信息 Broker 之后,不能马上被 Consumer 消费,需要到特定的时间点或等待特定的时间才能消费 。
如果您想适用任何时间精度,在 Broker 一方面,一定要做信息排列,如果涉及到持久性,那么信息排列必然会产生很大的特性成本 。
RocketMQ 适用于按时信息,但不适用于随机时间精度,适用于特定的时间精度 level,比如按时 5s,10s,1m 等 。
(15)信息再试
Consumer 消费信息失败后,应提供重试机制,使信息再次消费 。Consumer 一般可以认为消费信息失败有以下几种情况:
由于信息本身的原因,如反序列化失败,信息数据本身无法解决(如电话充值、当前信息手机号码注销、无法充值)等 。这个错误通常需要绕过这个消息,然后消费其他信息,即使失败的信息立即被消费,99%也不成功,所以试着提供一个及时的重试机制,即通过 10s 几秒钟后再试一次 。
因为依赖的下游应用服务不可用,比如 db 连接不可用,外部系统网络无法达到 。遇到这种错误,即使绕过当前失败的信息,消费其他信息也会报告错误 。建议使用这种情况 sleep 30s,再消费下一条消息,这样可以减少 Broker 再次尝试信息压力 。
简易说来,RocketMQ 具有以下特点:
①是具有高性能、高可靠性、高即时性、分布式特点的序列模型消息中间件 。
②Producer、Consumer、序列可以分布式 。
③Producer 轮流向一些序列发送信息,序列组合称为 Topic,Consumer 如果你做广播消费,那就是一个 consumer 案例消费这个 Topic 相应的所有序列,如果做集群消费,则多个 Consumer 这个案例的平均消费 topic 相应的序列组合 。
④能够保证严格的信息顺序 。
⑤提供丰富的信息获取方式 。
⑥高效的订阅水平扩展能力 。
⑦实时新闻订阅系统 。
⑧一亿级新闻积累能力 。
⑨更少的依赖 。