20年入职ryx公司后,刚好接触到一个线上问题,遂开了一个研究课题,一场针对Apache RocketMQ的无烟战争正式打开。
一开始刚接触这玩意,只是通过百度搜索简单了解下,后来发现很多文章复制粘贴严重。
于是就想自己看看源代码,前人摘树,后人乘凉。现在22年了,很多都又忘记了,待我慢慢补充。
先简单介绍一些基本概念
mq的使用场景:主要针对请求的削峰,解耦和异步处理。
mq的本质:
- 一种具备接受请求、保存数据、发送数据等功能的网络应用。
- 利用高效可靠的消息传递机制进行平台无关的数据交流; 并基于数据通信来进行分布式系统的集成;
- 通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。 和一般网络应用程序区别于它主要负责数据的接收和传递,所以性能高于普通程序。
mq的核心组成:
- 协议:网络协议(OpenWire、AMQP、MQTT、kafka、OpenMeaasge等)
- 持久化机制:存入磁盘而非内存,不能随服务重启而丢失。
- 消息分发机制:消息服务器把消息分发给具体的某个消费者的策略。消息分发,重试。
- 高可用设计:针对服务可用性的设计。集群。
- 高可靠设计:指系统无障碍的持续允许。譬如:一个系统从不崩溃不报错,或者异常几率低
协议三要素:
- 语法:即数据与控制信息的结构或格式
- 语义:即需要发出何种控制信息,完成何种动作以及作出什么反应
- 时序(同步):即事件实现顺序的详细说明
常见的网络协议为:
- OpenWire:ActiveMQ专属
- AMQP:ActiveMQ,RabbitMQ(事务、持久化支持)
- MQTT:物联网应用广泛(轻量、结构简单、传输快、无事务持久化支持,低带宽,网络不稳定的场景)
- kafka:基于TCP的二进制协议,结构简单,无事务支持,有持久化设计
- OpenMeaasge:Apache RocketMQ实现,结构简单,解析快,事务支持,持久化设计
- Producer:消息生产者,负责产生消息
- Consumer :消息消费者,负责消费消息,一般由后台系统异步消费
- Push Consumer :封装消息拉取,消费进程和内部
- Pull Consumer :主动拉取消息
- Producer Group :一类Producer的集合名称,通常发送一类消息,发送逻辑一致
- Consumer Group :一类Consumer的集合名称,通常消费一类消息,消费逻辑一致
- Broker :消息中转角色,负责存储消息,转发消息,即Rocketmq Server
- Topic :消息主题,在服务端配置,消费者按照主题订阅消息
- Tag :消息分类,用于对消息进行过滤,在主题下对消息进行二次划分 同一业务的不同目的可以用同样的topic不同tag来区分
- Message :在生产者和消费者之间传输的消息体,一个message必须属于某个topic
- Namesrv :一个无状态的名称服务,可以集群部署,每个启动的broker都会去注册, 主要是处理注册和接收客户端的路由请求并返回路由信息
- OffSet :偏移量,消费者拉取消息时需要知道上次消费位点,即从哪开始消费
- Partition :分区,Topic的物理分组,一个Topic可以有多个分区,每个分区是一个有序队列。 分区里的每个消息都会分配一个有序ID,即偏移量
- Key :表示消息唯一,方便定位消息,查询问题
标签:消费,持久,Producer,概念,初识,消息,Consumer,RocketMQ From: https://www.cnblogs.com/justtodo/p/16893517.html