rocketmq设计与实现
文章平均质量分 77
MQCloud
https://github.com/sohutv/mqcloud
展开
-
一条消息的一生
一、 消息的诞生消息,可以理解为异构系统数据交流的载体。它可以简单到只是一个单词:“Hello”,或是复杂的对象。每个生命的诞生都是一场考验,消息也不例外(这里的诞生是指消息成功发送并安全存储的过程)。准备工作 - 序列化由于RocketMQ是分布式的,其消息存储组件-broker承担着核心的存储工作。也就是说消息需要跨网络传输,才能到达broker。那么这就涉及到序列化工作了,何谓序列化?序列化就是把对象转化为字节数组的过程。为什么需要转换成字节数组呢?因为计算机存储和网络传输都只认字原创 2021-04-14 09:12:06 · 482 阅读 · 0 评论 -
5.NameServer
NameServer作为rocketmq中重要的组件其主要有如下功能:接受boker注册与解除注册获取broker集群信息根据topic查询其路由信息查询所有的topic删除topic查询某集群下的所有topic一些键值对设置,比如顺序消息相关设置接受boker注册与解除注册broker注册时会携带如下信息集群的名字地址broker名字broker id: 0为mast原创 2016-09-19 14:21:09 · 2590 阅读 · 7 评论 -
10.零拷贝原理
为何要懂零拷贝原理?因为rocketmq和存储核心使用的就是零拷贝原理。io读写的方式中断DMA中断方式中断方式的流程图如下:用户进程发起数据读取请求系统调度为该进程分配cpucpu向io控制器(ide,scsi)发送io请求用户进程等待io完成,让出cpu系统调度cpu执行其他任务数据写入至io控制器的缓冲寄存器缓冲寄存器满了向cpu发出中断信号cpu原创 2016-09-19 14:58:27 · 8567 阅读 · 3 评论 -
9.最佳实践
nameserver相关nameserver如何扩容/下线?由于broker,producer,consunmer都涉及到nameserver地址列表,故推荐如下方式配置:broker相关broker如何下线?先将slave kill掉, 防止kill master后consumer从slave消费如果直接kill master,会造成生产者和消费者原创 2016-09-19 14:39:38 · 1206 阅读 · 2 评论 -
8.consumer
消息的消费者,从消息获取方式分为:推拉 - 推包含了拉,所以拉不再单独说明推 com.alibaba.rocketmq.client.consumer.DefaultMQPushConsumer从使用上来看,数据是broker端源源不断的将消息推到消费者从消息的消费方式上,分为:集群消费:所有的消费者平均消费一份消息广播消费:每个消费者各自消费同一份消息 从消费的顺原创 2016-09-19 14:32:04 · 2644 阅读 · 3 评论 -
7.producer
消息生产者,消息的种类:普通消息import com.alibaba.rocketmq.client.exception.MQClientException;import com.alibaba.rocketmq.client.producer.DefaultMQProducer;import com.alibaba.rocketmq.client.produc原创 2016-09-19 14:27:28 · 1206 阅读 · 0 评论 -
6.broker
broker主要有以下几大功能接受客户端发送到消息,并存储接受客户端的消费请求,返回消息数据consumergroup消费进度存储、查询topic配置管理一些其他的配置管理、查询:topic创建、删除、修改,broker配置查询、修改,消息查询,broker运行状态,producer、consumer连接,消费进度等待broker额外存储的持久化数据,默认存储路径为$HOME/stor原创 2016-09-19 14:23:40 · 1143 阅读 · 0 评论 -
4.通信层
概述rocketmq通信层采用netty来实现,netty是nio socket的一个框架nio vs io区别ionionio优势nio缺点面向流面向缓冲面向缓冲区的编程方式流式处理数据直观,优雅,nio不具备这些优点阻塞非阻塞数据不可获取时不进行等待,节省原创 2016-09-19 14:07:08 · 3114 阅读 · 0 评论 -
2.存储层
commitlog存储路径默认为$HOME/store/commitlog,可以在broker启动时通过storePathCommitLog设置,存储的文件如下图所示,默认大小为1G:数据过来如何存储到这些文件里面呢?消息需要加一些元数据消息加元数据的结构如下:序号类型值释义1intTOTALS原创 2016-09-19 13:57:23 · 2300 阅读 · 0 评论 -
3.存储层高可用
rocketmq的存储层是支持高可用的,通过将数据同步到其他地方的方式实现。那么,从broker的不同角色角度来看,如下图:从broker的数据同步方式,又分为同步双写和异步复制,其逻辑图如下:同步双写:异步复制:同步双写和异步复制的实现虽然逻辑上看来两种方式是不一样的,但是在rocketmq中却是同一份代码实现的,甚至,连master和slave的代码原创 2016-09-19 14:00:42 · 1150 阅读 · 0 评论 -
1.简介
rocketmq是什么高可用,高性能,分布式有序队列使用场景 如果业务系统遇到如下词语,可以使用rocketmq系统解耦发布订阅分布式队列数据延时处理分布式事务非实时业务削峰物理部署结构name server 主要负责存储topic的路由信息节点之间无数据通信无状态可以集群部署broker 主要负责消息存储功能和消息消费功能分为原创 2016-09-19 13:51:32 · 1239 阅读 · 0 评论