RocketMq
文章平均质量分 77
RocketMq
猎户星座。
花有重开日,人无再少年。
展开
-
RocketMQ原理解析之queue
write queue 和 read queue 是一一对应的,如果 write queue 的数量多于 read queue,那么就会有一部分 write queue 中的消息永远不会被消费到;使扩缩容的过程更加平滑,比如原来有 4 个 write queue 和 read queue,先将 write queue 缩容成 2 个,那么此时先不缩容读队列,等待与删除的两个读队列所对应的写队列中的旧数据被消费完毕之后,再对读队列进行缩容。,写磁盘分为两种:顺序写和随机写,两种速度差别非常大!转载 2024-02-18 17:26:08 · 244 阅读 · 0 评论 -
RocketMq之延时消息
1 延迟消息介绍基本概念:延迟消息是指生产者发送消息发送消息后,不能立刻被消费者消费,需要等待指定的时间后才可以被消费。场景案例:用户下了一个订单之后,需要在指定时间内(例如30分钟)进行支付,在到期之前可以发送一个消息提醒用户进行支付。一些消息中间件的Broker端内置了延迟消息支持的能力,如:NSQ:这是一个go语言的消息中间件,其通过内存中的优先级队列来保存延迟消息,支持秒级精度,最多2个小时延迟。Java中也有对应的实现,如ScheduledThreadPoolExecutor内部实转载 2022-01-21 11:39:44 · 1188 阅读 · 0 评论 -
RocketMq之消息发送算法
问:发消息的时候选择queue的算法有哪些?答:分为两种,一种是直接发消息,不能选择queue,这种的queue选择算法如下: 在不开启容错的情况下,轮询队列进行发送,如果失败了,重试的时候过滤失败的Broker 如果开启了容错策略,会通过RocketMQ的预测机制来预测一个Broker是否可用 如果上次失败的Broker可用那么还是会选择该Broker的队列 如果上述情况失败,则随机选择一个进行发送 在发送消息的时候会记录一下调用的时间与是否报错,根据该时原创 2022-01-20 13:43:44 · 172 阅读 · 0 评论 -
RocketMq之创建主题
自动创建的风险用户指定的读写队列数可能不是预期结果。创建的Topic的读队列数和写队列数取值为默认Topic(“TBW102”)的读队列数和Produce端设置的队列数的最小值。 不能保证所有的Broker上都能注册该Topic。Broker创建了新的Topic后,新的Topic信息马上被同步给了Namesrv,然后其他的Producer也刚好都从Namesrv同步了该Topic的路由信息,则接下来所有的Producer都只会向这一个Broker发送消息,其他Broker也就不会再有机会创建新Topi原创 2022-01-20 11:36:01 · 2827 阅读 · 0 评论 -
零拷贝简介
传统IO在开始谈零拷贝之前,首先要对传统的IO方式有一个概念。基于传统的IO方式,底层实际上通过调用read和write来实现。通过read把数据从硬盘读取到内核缓冲区,再复制到用户缓冲区;然后再通过write写入到socket缓冲区,最后写入网卡设备。整个过程发生了4次用户态和内核态的上下文切换和4次拷贝,具体流程如下:用户进程通过read方法向操作系统发起调用,此时上下文从用户态转向内核态DMA控制器把数据从硬盘中拷贝到读缓冲区CPU把读缓冲区数据拷贝到应用缓冲区,上下文转载 2021-04-03 20:14:52 · 204 阅读 · 0 评论 -
RocketMq之削峰
MQ的主要特点为解耦、异步、削峰,本篇博客只是简单的记录RocketMQ削峰用法,用于减少数据库压力的业务场景。生产者,消费者的配置可以参考以前的文章,这里只列出消费者新增的两个配置: @Bean(initMethod = "start", destroyMethod = "shutdown") public DefaultMQPushConsumer BatchConsumer() { DefaultMQPushConsumer consumer = new Def原创 2020-06-06 10:20:56 · 811 阅读 · 0 评论 -
RocketMq之消费方式
最近仍然畅游在RocketMQ的源码中,这几天刚好翻到了消费者的源码,发现RocketMQ的对于push消费方式的实现简直太聪明了,所以趁着我脑子里还有点印象的时候,赶紧来写一篇文章,来掰扯一下,防止过两天就忘得一干二净了。MQ消费方式消费方式就是指消费者如何从MQ中获取到消息,分为两种方式,push(推方式)和pull(拉方式)。1、push(推方式)push,顾名思义,就是推的意思。就是当MQ收到生产者产生的消息的时候,会主动将消息推送到消费者进行消费,这种模式就叫push,也就是MQ将转载 2020-06-03 22:38:50 · 6426 阅读 · 1 评论 -
RocketMq之消息可靠性
1. 消息的发送流程一条消息从生产到被消费,将会经历三个阶段:生产阶段,Producer 新建消息,然后通过网络将消息投递给 MQ Broker 存储阶段,消息将会存储在 Broker 端磁盘中 消息阶段, Consumer 将会从 Broker 拉取消息以上任一阶段都可能会丢失消息,我们只要找到这三个阶段丢失消息原因,采用合理的办法避免丢失,就可以彻底解决消息丢失的问题。2. 生产阶段生产者(Producer) 通过网络发送消息给 Broker,当 Broker 收到之后,.转载 2020-06-03 22:10:15 · 545 阅读 · 0 评论 -
RocketMq之水平扩展及负载均衡
RocketMQ是一个分布式具有高度可扩展性的消息中间件。本文旨在探索在broker端,生产端,以及消费端是如何做到横向扩展以及负载均衡的。Broker端水平扩展Broker负载均衡Broker是以group为单位提供服务。一个group里面分master和slave,master和slave存储的数据一样,slave从master同步数据(同步双写或异步复制看配置)。通过nameserver暴露给客户端后,只是客户端关心(注册或发送)一个个的topic路由信息。路由信息中会细化为messa转载 2020-06-03 22:00:25 · 600 阅读 · 0 评论 -
RocketMQ之消息存储和查询原理
一、CommitLogCommitLog,消息存储文件,所有主题的消息都存储在 CommitLog 文件中。我们的业务系统向 RocketMQ 发送一条消息,不管在中间经历了多么复杂的流程,最终这条消息会被持久化到CommitLog文件。我们知道,一台Broker服务器只有一个CommitLog文件(组),RocketMQ会将所有主题的消息存储在同一个文件中,这个文件中就存储着一条条Message,每条Message都会按照顺序写入。也许有时候,你会希望看看这个 Commit..转载 2020-06-03 07:03:39 · 924 阅读 · 0 评论 -
RockerMq之事务消息
本篇博客的RocketMq版本为4.3.0,首先附上RocketMq事务消息的流程图,以下的实践也都是基于此流程图生产端项目RocketMqConfig配置生产者package com.yj.producer.config;import org.apache.rocketmq.client.producer.TransactionMQProducer;import org....原创 2020-01-28 16:26:49 · 472 阅读 · 0 评论 -
Kafka VS RocketMq
淘宝内部的交易系统使用了淘宝自主研发的Notify消息中间件,使用Mysql作为消息存储媒介,可完全水平扩容,为了进一步降低成本,我们认为存储部分可以进一步优化,2011年初,Linkin开源了Kafka这个优秀的消息中间件,淘宝中间件团队在对Kafka做过充分Review之后,Kafka无限消息堆积,高效的持久化速度吸引了我们,但是同时发现这个消息系统主要定位于日志传输,对于使用在淘宝交易、订单...转载 2018-10-29 19:20:34 · 980 阅读 · 0 评论 -
RocketMq之集群部署
1、简介刷盘策略 Disk Flush(磁盘刷新/同步操作):就是将内存的数据落地,存储在磁盘中。RocketMQ提供了以下两种模式:SYNC_FLUSH(同步刷盘):生产者发送的每一条消息都在保存到磁盘成功后才返回告诉生产者成功。这种方式不会存在消息丢失的问题,但是有很大的磁盘IO开销,性能有一定影响。 ASYNC_FLUSH(异步刷盘):生产者发送的每一条消息并不是立即保...原创 2018-09-29 15:38:19 · 922 阅读 · 0 评论 -
RocketMq之单点部署
RocketMq单点部署,仅供个人开发测试使用,生产环境建议采用2m-2s-async,即两主两从异步复制模式(在博主的下一篇博客中将对这种集群模式做详细的介绍)1.官网下载最新的安装包,rocketmq-all-4.3.1-bin-release.zip2.解压,解压到/opt目录下3.自定义nameserver和broker的日志文件的位置,修改conf目录logback_na...原创 2018-09-28 16:32:46 · 2209 阅读 · 0 评论 -
RocketMq之简单实践
1、项目总体结构,如下图所示RocketMqConfig文件:package com.yj.mq.config;import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;import org.apache.rocketmq.client.consumer.listener.MessageListenerCon...原创 2018-06-19 21:19:08 · 822 阅读 · 0 评论 -
RocketMq之简介
1.官方定义RocketMq是一个队列模型的消息中间件,具有高性能、高可靠、高实时、分布式特点。 Producer、Consumer、队列都可以分布式。 Producer 向一些队列轮流发送消息,队列集合称为 Topic,Consumer 如果做广播消费,则一个 consumer实例消费这个 Topic 对应的所有队列,如果做集群消费,则多个 Consumer 实例平均消费这个 top...转载 2018-06-14 21:51:02 · 1151 阅读 · 1 评论