首页 > 其他分享 >RocketMQ学习

RocketMQ学习

时间:2023-07-31 17:11:50浏览次数:30  
标签:异步 顺序 重试 发送 学习 消息 RocketMQ 刷盘

rabbitMQ(ons)特性

0拷贝 顺序写盘 随机读   延迟消息 事务消息 顺序消息 (rabbit没有这个)

基于netty nio框架

NameServer代替Zookeeper,寻址方式,更轻量级。

集群架构无单点,扩展性强。

消息重试机制,消息查询(rabbit不支持重试)

社区活跃、成熟度好

 模型

Producer 

Consumer

Broker

 

Netty分析

  • RemotingService
  • RemotingClient
    • 更新服务列表
    • 同步发送
    • 异步发送
    • 注册服务
      • 检查事务状态
    • 回调函数,生产者发异步消息的时候
  • RemotingServer
    • 注册admin接口
    • getProcessorPair
    • 同步发送
    • 异步发送
    • 这一块是netty编程模型 

  • netty底层源码解析
    • + 消息长度
    • + 序列化类型&&头部长度
    • + 消息头数据
    • + 消息主体数据。

racketMq: fastJson传输

 

消息投递 消息返回状态

  • send_ok 发送成功
  • flush_disk_timeout 有可能刷盘失败了
  • flush_slave_timeout 从节点同步失败
  • slave_not_available 从节点不可用

后三种要可靠性重投递。

延迟消息

在message上设置一个delayTimeLevel。发到broker后,会延迟。

 这个时间不能改,就固定选这些。

  • lv1 1s
  • lv2 5s
  • lv3 10s
  • 以此类推

 

怎么把消息发送到指定队列里

一个message默认有四个Mseeage Queue

MessageQueueSelector 负载均衡策略 轮询去发消息

cousumer 也是轮询消费

producer.send(Msg, selector, Obj);   selector就是指定发送的对象

 

Broker存储结构

consumer Queue  记录了,消息偏移量信息

commit Log  所有信息,包括偏移信息 

大小???

写盘方式 随机写 顺序读

消费端 0拷贝 

 

同步刷盘 异步刷盘

内存+磁盘存储两种刷盘方式

异步刷盘

同步刷盘

 

事务消息

不用事务的话,阻塞,增加处理时间,降低了RT。

架构场景

例子:支付A和支付B怎么可靠性解耦

  1. 消息发到MQ集群,同时提交事务A账户-100。
  2. 提交本地事务,发一个确认消息。
  3. 3这个时候才可见,之前不可见。

问题是:

2确认消息有可能发送失败,那一直都不可见。用mysql的存储,例如:0是不可见,1可见

解决:

MQ集群主动查询生产端,check是否成功。发ACK。

不断重试。

 代码例子

(大致)

 

 

 顺序消息

消费顺序和生成的顺序是相同的。例如场景:生成订单、付款、发货。

分为:

  • 全局顺序
    • 生成消费都是1个,这样才行。
  • 局部顺序
    • 保证每一组消息顺序执行
    • 生产和消费都要做限制才行
    • 要求:
      • 投递到同一个消息下,同一个队列中。
      • 消费端就是单线程取。读栈的模式。

 消费端

 

 

 

 

 

 

相关问题:

1.为什么使用mq,具体场景是什么?

  削峰填谷;扣减预算,积分,同步数据,记录日志,巡检优化,bcp检查,数据兜底。

2.使用什么mq,基于什么选型

  同事推荐;大qps单机最大写50Wtps;支持分布式高并发业务;有事务消息和顺序消息。

3.异步发送,怎么保证消息可靠性

  防止生产者丢失:异步有回调和异步无回调;本地消息表,更改状态,人工介入。

  防止MQ本身丢失:同步刷盘和异步刷盘,根据业务做取舍,异步的不可靠,但是效率高。

  防止消费者丢失:消费成功返回resume,否则一直执行,直到进入死信队列,人工处理。

4.消费失败重试,导致消息积压,怎么处理?

  修复时,同时建一个consumer去消费当前消息,记录消息内容。

  修复问题代码或服务。

  重试消息。

5.消息积压达到磁盘上限,消息丢失怎么办?

  本地消息表,筛选出未成功的数据。

6.rocketMq

  nameServer 注册中心

  producer 生产者集群

  consumer 消费者

7.为什么注册中心不用zookeeper

  1. zk满足cp,不能保证可用性。
  2. nameServer轻量级,水平扩展性好,
  3. 持久化机制zk太重
  4. 若依赖注册中心,从nameServer获取broker地址后,在生产者本地缓存。

8.brocker是怎么保存数据

9.master和slave是怎么同步的

raft协议 broker收到消息 置为uncommited,随后置为slave,置为commit。

10.Rocket为什么速度快

顺序存储,pagecache,异步刷盘。

 

标签:异步,顺序,重试,发送,学习,消息,RocketMQ,刷盘
From: https://www.cnblogs.com/jiangym/p/17593823.html

相关文章

  • web前端学习第一天
    一、web应用程序开发介绍    1.界面部份    2.业务逻辑部份    3.数据存储部份 二、 web应用程序开发三大核心技术   HTML CSS  JAVASCRIPT    html:超文本标记语言        作用:网页内容、结构    css:......
  • 程序员学习能力提升三要素
    IT技术的发展日新月异,新技术层出不穷,具有良好的学习能力,能及时获取新知识、随时补充和丰富自己,已成为程序员职业发展的核心竞争力。本文中,作者结合多年的学习经验总结出了提高程序员学习能力的三个要点。众所周知,现在是一个知识爆炸的时代,知识更新非常快。据测算,一个大学毕业生......
  • 机器学习从入门到放弃:Transfomer-现代大模型的基石
    一、前言随着ChatGPT的横空出世,全世界的目光都聚焦在了生成式AI上。本次将介绍Transformer的发展历史、基本原理,也是记录总结自己在学习路上的所得。首先我想聊聊NLP的发展路线,这样对于后面的transformer可能会有更好的理解。自从计算机诞生之初,让计算机理......
  • github学习笔记(九):分支管理策略
    合并的分支到底是如何管理的呢?分支的合并通常git使用Fastforward模式来合并分支,但是这种模式下一旦删除分支,信息也随之消失。如果强制禁用FastForward模式,git就会在merge时生成一个新分支,这样从分支历史上就可以看出分支信息。例子创建并切换分支、修改文件、提交新的com......
  • 【学习笔记】扫描线
    扫描线是用来求解图形面积并的一个算法。问题引入给定\(n\)个长方形,求它们的面积并。下面以两个长方形为例:对于这个问题,可以有容斥等做法,但是还有个更简单的方法——扫描线。扫描线扫描线,顾名思义,就是,拿一条“线”取扫(这里是从下往上扫,其实其它的扫的方式也是可以的):如图......
  • 【Python&目标识别】Labelimg标记深度学习(yolo)样本
    ​    人工智能、ai、深度学习已经火了很长一段时间了,但是还有很多小伙伴没有接触到这个行业,但大家应该多多少少听过,网上有些兼职就是拿电脑拉拉框、数据标注啥的,其实这就是在标记样本,供计算机去学习。所以今天跟大家分享下如何使用Labelimg去自己标记深度学习样本。......
  • 【机器学习】逻辑回归
    LogisticRegression分类问题本质是分类,要预测的变量是离散的值逻辑回归模型数学表达式\[z=\vecw\cdot\vecx+b\tag{1}\]\[f_{\vecw,b}(\vecx)=g(z)\tag{2}\]\[g(z)=\frac{1}{1+e^{-z}}\tag{3}\]=>\(f_{\vecw,b}(\vecx)=\frac{1}{1+e^{-(\ve......
  • 【机器学习】softmax回归
    SoftmaxRegression(多标签分类)将多输入的分类值转化为[0,1]的概率分布,进而进行逻辑回归算法softmax能将差距大的数值距离拉得更大,但是数值可能会溢出SoftmaxFunction数学表达式\[a_j=\frac{e^{z_j}}{\sum_{k=1}^{N}{e^{z_k}}}\]代码defmy_softmax(z):ez=n......
  • 【机器学习】协同过滤
    CollaborativeFilteringRecommenderSystems解决相似度问题概念准确率=\(accuracy=\frac{预测正确的样本}{总样本}\)精确率=\(precision=\frac{预测成功的正类}{预测的正类}\)【不能误检】召回率=\(recall=\frac{预测成功的正类}{总正类}\)【不能漏报】相......
  • 【机器学习】正则化
    RegularizedCostfunction forregularizedlinearregression数学表达式\[J(\mathbf{w},b)=\frac{1}{2m}\sum\limits_{i=0}^{m-1}(f_{\mathbf{w},b}(\mathbf{x}^{(i)})-y^{(i)})^2+\frac{\lambda}{2m}\sum_{j=0}^{n-1}w_j^2\]\[f_{\mathbf{w},b}(......