简介:阿里开源消息队列RocketMQ4.x介绍和新概念讲解
一、Apache RocketMQ作为阿里开源的一款高性能,高吞吐量的分布式消息中间件
特点:
①、支持Broker和Consumer端信息过滤
好比头里的消息,消费者可以让在Broker上面过滤,应用程序,也就是rocketMQ启动之后在服务端进行过滤,也可以在Consumer中拿到消息进行过滤。因为有些消息是不需要的,就给它排序掉,减少带宽的传输。
②、支持发布订阅模型,和点对点:目前主流的消息队列都是支持的
③、支持pull和推push两种消息模式,消息在broker里面,Consumer在获取消息的时候,有两种模式,一种是pull,一种是push的模式。这两种方式都是长连接的轮询的方式去进行获取消息的。
④、单一队列百万消息,亿级消息堆积
对于kafka和activeMQ的话,亿级的消息对于 activeMQ的性能会急剧下降,kafka是没有问题的。
⑤、在reocketMQ部署的时候,会支持很多种模式:支持单节点master节点,多master节点,多master多salve节点,根据业务的情况选择。
⑥、任意一点都是高可用,水平扩展,Producer,Consumer:都可以支持水平 扩展,队列都可以分布式
⑦、也支持消息的失败重试机制:比如消息投递和消费失败的话,可以进行重试,支持特定level的定时消息:比如消息投递到broker,消费者从broker里面去拉取消息。
可以隔几秒的从Broker中拉取消息过来:这个在业务电商里面用的很多。
⑧、新版本的底层采用Netty,ES和Dubbo的底层都是使用netty。
⑨、4.3.x之后支持分布式事务。
⑩、适合金融类业务,高可用性能跟踪和审计功能,可以防止消息丢失。不是百分之百避免消息不重复消费的。如果想要不重复消费的话,需要在业务层代码控制。
二、概念
①、Producer:消息生产者
②、Producer Group:消息生产者,发送同类消息的一个消息生产组
比如应用程序可以部署很多个节点,每个节点都有一个Producer,Producer可以给它取个组名 。
③、Consumer:消费者
④、Consumeer Group:消费同类消息的多个实例
⑤、Tag标签:子主题(二级分类),对topic的进一步细化,用于区分同一个主题下的不同业务的消息。比如订单类的消息:user_topic,订单类的消息可以分类很多种,比如退款,支付等等的很多消息,就可以用Tag标记下,二级分类
⑥、Topic:主题,如订单类消息,queue是消息的物理管理单位,而Topic是逻辑管理单位,一个topic下可以用多个queue,默认自动创建4个queue(这个会涉及到后期的consumer的分配,因为Topic和queue的数量要匹配上,否则后期时有的consumer会拿不到消息的),手动创建是8个。
⑦、Message:消息,接收生产的消息,提供给消费者消费的程序
⑧、Broker:MQ程序,接收生产的消息,提供给消费者消费的程序。
⑨、Name Server:给生产和消费者提供路由信息,提供轻量级的服务发现,路由,元数据信息,健康程度,负载,Ip信息,端口号等等。可以多个部署,互相 独立(比zookeeper更轻量)
好比现在的很多的应用程序,部署了很多的消息队列,生产者把消息生产之后,投递到哪一个broker里面,它是不知道的,它就会去找name Server,因为Name Server会记录所有额消息队列节点的信息。好比注册中心。不管Consumer还是Producer都会连到Name Server里面去。kafka用zookeeper做注册中心为了路由寻址的功能,但是zk比较笨重。
⑩、Offset:偏移量,可以理解为消息进度。好比数组的下标
十一、commit log:当producer将消息投递到broker,broker将消息存储在Commit log文件里面。创建rocketmq的时候会主动创建commit log。写消息的时候就会把消息写入到Commit log文件里面去。