自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

原创 干起了人人字幕组的翻译工作-贡献开源代码

前段时间接触到了ALC Beijing,Apache Local Community Beijing 开源社区,一直想向开源社区贡献自己代码,懵懂的心,冲动的劲儿,为了满足好奇心,今天准备大干一场,向开源社区提交自己代码,简单来说,就是翻译Apache Innvoation 官方视频的英文字幕,为中文,可把我牛 B坏了,我要叉会腰。小心翼翼地在官网领了翻译工作,开始了忐忑的翻译之旅,实际也不是翻译的忐忑,因为之前翻译了 Raft 协议论文,而是第一次向开源社区提交代码,心里有些不安,怪紧张的,怕操作错了

2021-04-03 01:03:06 402 4

原创 Raft-译文

Raft-译文Replicated And Fault-TolerantRaft协议一种易于理解的一致性算法,比Paxos更易于理解。Abastract 摘要Raft是一个管理副本日志的一致性算法。一致性结果、效率和Paxos是相同的,但比Paxos更易于理解。它的构造不同于Paxos,提供了一个更易于理解、代码实现起来更容易理解的指导依据。为了提高易于理解性,它分离一致性的关键性要素,比如:领导选举、日志复制、安全性,他减少了成员状态,加强了一致性级别。改变成员之间的关系,引入了一种新的机

2021-03-16 15:11:53 237

原创 事务消息

总览RocketMQ事务消息(Transactional Message)是指应用本地事务和发送消息操作可以被定义到全局事务中,要么同时成功,要么同时失败。RocketMQ的事务消息提供类似 X/Open XA 的分布事务功能,通过事务消息能达到分布式事务的最终一致。RocketMQ 事务消息设计则主要是为了解决 Producer 端的消息发送与本地事务执行的原子性问题,RocketMQ 的设计中 broker 与 producer 端的双向通信能力,使得 broker 天生可以作为一个事务协调者存在;

2021-02-03 18:08:10 817

原创 顺序消息

顺序消息顺序消息是指消息消费的顺序和生产者发送消息的顺序一样的。例如:一个订单产生了三条消息分别是订单创建、订单付款、订单完成。消费时要按照这个顺序消费才能有意义,但是同时订单之间是可以并行消费的。RocketMQ可以严格的保证消息有序。分区有序分区有序是指这个Topic下这个队列下的消息是有顺序的,生产者发送消息的时候,将严格按照消息的顺序,将消息们发送到一个Topic下的一个队列,从而保证了生产者分区消息有序,消费者进行消费时,进行单线程单队列消费,保证了消费有序。适用场景:性能要求高,以 s

2021-02-03 18:07:41 401

原创 消息进度管理

总览消息消费者在消费一批消息后,需要记录该批消息已经消费完毕,然后也会从ProcessQueue处理队列中移除该批消息,返回ProcessQueue最小偏移量,并存入消息进度表中。广播模式同一个消费组的所有消息消费者都需要消费主体下的所有消息,也就是统一组内的消费者的消费行为是相互独立的,互相不影响,故消息进度需要独立存储,与消费者绑定,消费进度存储在消费者本地LocalFileOffsetStore。集群模式同一个消费组内的所有消费消费者共享主题下的所有消息,同一条消息在同一时间只会被消费者组内

2021-02-03 18:07:03 143

原创 定时消息机制

概览定时消息是指消息发送到Broker后,并不立即被消费者消费而是要等到特定的时间后才能被消费。broker有配置项messageDelayLevel,默认值为“1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h”,18个level。可以配置自定义messageDelayLevel。注意,messageDelayLevel是broker的属性,不属于某个topic。发消息时,设置delayLevel等级即可:msg.setDelayLev

2021-02-03 18:06:32 401

原创 消息拉取与消息队列的负载均衡

总览消息消费的模式有两种推模式、拉模式;拉模式已经不再推荐使用,因此本章将详细介绍推模式。推模式消息到达消息服务器后,服务器推送消息给消费者。 RocketMQ消息推模式并不是真正意义上的服务端将消息推送给消费端。本质实现为消费端消息拉取线程在从服务器拉取到一批消息后,然后提交到消息消费线程池后,又“马不停蹄”的继续向服务器再次尝试拉取消息,再提交到消息消费线程池,然后由消费端消费线程异步的从消费线程池获取消息进行消息消费,解耦了消息拉取和消息消费过程。如果未拉取到消息,则延迟一下又继续拉取。负载均

2021-02-03 18:05:44 1023

原创 RocketMQ消费启动流程

概览消息消费包含两种推模式和拉模式,拉模式官方已经不推荐使用,那我们今天就介绍推模式。DefaultMQPushConsumer是推模式消费的对外API,消费的功能主要由成员变量DefaultMQPushConsumerImpl提供。DefaultMQPushConsumerImpl是消息消费的主要实现类。消费者启动流程关键步骤如下:this.copySubscription();订阅重试主题消息。从这里可以看出,RocketMQ消息重试是以消费组为单位的,而不是主题,消息重试主题名为"%RETR

2021-02-03 18:04:58 212

原创 RocketMQ消息消费概览

概览RocketMQ消息消费以消费组为消费维度的,消费组之间消息消费有集群模式与广播模式两种消费模式。广播模式主题下的同一条消息将被集群内的所有消费者消费一次。集群模式主题下的同一条消息只允许被其中一个消费者消费。一个消费组内可以包含多个消费者,一个消费者组订阅相同的消息主题,一个主题Topic拥有多个消息存储队列。每一个组内的消费者可以消费这个Topic下的多个消息队列,Topic下的一个消息队列只能被一个同一个组的一个消费者消费。消息服务器与消费者之间的消息传送也有两种方式:推模式、拉模式。

2021-02-03 18:04:30 311

原创 消费贷利率

先说结论贷款中介产品:额度30万元,服务费3000元,年华利率4.35%,授信3年,先息后本,每月还息,一年后换本。真实贷款年华利率:5.514%为了简单计算我们一次性提取30万元,3000元的断头息,每月归还利息,一年后归还本金。这里有一个注意点:3000元断头息我们一次性给了贷款中介;相当于我们贷款了297000元,但是计算每月的归还的利息是30万元。IRR内部收益率计算真实年华利率中介贷款银行年化4.68%银行年化...

2021-01-25 22:40:11 989

原创 RocketMQHA机制

概览RocketMQ作为一款优秀的分布式消息中间件,分布式系统的一个很重要的特点就是要保证系统的高可用(HA),RocketMQ则是通过主从同步机制保证系统的高可用。下面是两主两从的主从同步原理图。主从两节点优点数据备份:保证了两/多台机器上的数据冗余,特别是在主从同步复制的情况下,一定程度上保证了Master出现不可恢复的故障以后,数据不丢失。高可用性:即使Master掉线, Consumer会自动重连到对应的Slave机器,不会出现消费停滞的情况。提高性能:主要表现为可分担Master读

2021-01-24 22:27:31 429

原创 RocketMQ刷盘机制

概览RocketMQ的存储读写是基于JDK NIO的内存映射机制的,消息存储时首先将消息追加到内存中。在根据不同的刷盘策略在不同的时间进行刷盘。如果是同步刷盘,消息追加到内存后,将同步调用MappedByteBuffer的force()方法,同步等待刷盘结果,进行刷盘结果返回。如果是异步刷盘,在消息追加到内存后立刻,不等待刷盘结果立刻返回存储成功结果给消息发送端。RocketMQ使用一个单独的线程按照一个设定的频率执行刷盘操作。通过在broker配置文件中配置flushDiskType来设定刷盘方式,AS

2021-01-24 22:26:26 605

原创 Broker启动历史数据加载

概览Broker启动需要知道commitlog上次的commitWhere、flushWhere上次的位置,启动流程加载commitlog、consumequeue、index、abort、checkpoint文件是为了获取这些值,为接受即将到来的消息做准备。由于RocketMQ存储首先将消息全量存储在commitlog文件中,然后异步生成转发请求更新consumequeue、index索引文件。如果消息成功存储到commitlog文件中,转发任务未成功执行,此时消息服务器Broker由于某个原因宕机,

2021-01-24 22:24:58 148

原创 Index索引文件及构建

Index索引文件概览消息消费队列是RocetMQ专门为消息订阅构建的索引服务,提高主题与消息队列检索消息的速度。IndexFile(索引文件)提供了一种可以通过key或时间区间来查询消息的方法。Index文件的存储位置是:$HOME/store/index/{fileName},文件名fileName是以创建时的时间戳命名的,固定的单个IndexFile文件大小约为400M,一个IndexFile可以保存 2000W个索引,IndexFile的底层存储设计为在文件系统中实现HashMap结构,故rock

2021-01-24 22:24:10 1766

原创 ConsumeQueue索引文件及构建

ConsumeQueue概览RocketMQ是基于主题订阅模式实现消息消费,消费者关心的是主题Topic下的所有消息,同一主题的消息不连续地存储在commitlog文件中,如果直接从commitlog文件中去遍历查找订阅主题下的消息,效率极其低下,为了适应消息消费的检索需求,设计了消息消费队列文件ConsumeQueue,该文件可以看成是Commitlog关于消息消费的索引文件,consumequeue的一级目录为主题Topic,二级目录为Topic的消息队列。主要是针对每一个Topic建立的索引,方便消

2021-01-24 22:23:12 793

原创 RocketMQ存储文件与内存映射

概览RocketMQ的消息存储主要是在${ROCKETMQ_HOME}/store文件夹下,message消息主要存储在commitlog文件夹下,RocketMQ消息存储和索引是分开隔离的,已Topic为主题的消息索引存储在consumequeue文件夹下,通过MessageQueue映射为ConsumeQueue的文件就存储在这个文件夹下,然后index主要是以消息key和offset的对应关系,以类似HashMap的方式存储,方便消息查询。本片文章主要介绍消息存储组织结构、Message是如何快

2021-01-24 22:22:19 932

原创 RocketMQ 发送消息存储流程

存储总览业务系统大多数需要 MQ 有持久存储的能力,能大大增加系统的高可用性。从存储方式和效率来看,文件系统高于 KV 存储,KV 存储又高于关系型数据库,直接操作文件系统肯定是最快的,但可靠性却是最低的,而关系型数据库的性能和可靠性与文件系统恰恰相反。存储实现RocketMQ 存储概要设计消息发送存储流程存储文件组织与内存映射机制RocketMQ 存储文件消息队列、索引文件构建和机制RocketMQ 文件恢复机制RocketMQ 刷盘机制RocketMQ 文件删除机制存储概要设计

2021-01-24 22:21:21 239

原创 RocketMQ 发送消息

概览RocketMQ 支持 种消息发送方式 :同步(sync)、 异步(async)、单向(oneway)。Message消息封装类 org.apache.rocketmq.common.message.Messagepublic class Message implements Serializable { private static final long serialVersionUID = 8445773977080406428L; private String topi

2021-01-24 22:20:02 332

原创 RocketMQ架构概览

起因阿里巴巴团队使用 ActiveMQ 5.x处理消息,遇到瓶颈;而此时分布式流式处理引擎 Kafka 已经兴起,Kafka 存在高延迟、没有事务支持等功能就被放弃了,而阿里巴巴团队基于消息队列的基础模型开发了 RocketMQ,可以理解为 RocketMQ 为处理消息而生。架构组件NameServerNameServer是一个几乎无状态节点,可集群部署,节点之间无任何信息同步,他们之间是独立的、并行的,各自保留了一份全部的 Broker、Topic 等集群信息。非常简单的 Topic 路由注

2021-01-24 22:17:08 129

原创 JAVA1.7 1.8 HashMap concurrentHashMap源码阅读

hashMap中 table是一个含有 Entry 的数组;初始化大小为initialCapacity,其中Entry是一个含有hash值。key,value,next的entry的 自定义结构。其中桶的概念就是一个table数组中的一个元素,而形成的一个链表;1.7 hashMap put(K key, V value)方法public V put(K key, V value) {...

2018-09-21 16:48:22 155

翻译 akka Stream SubStreams 官网实例

 import akka.actor.ActorSystemimport akka.stream.ActorMaterializerimport akka.stream.scaladsl.{Sink, Source}object SubStreamExample { implicit val system = ActorSystem("QuickStart2") im...

2018-09-21 16:46:04 359

转载 网页响应状态码

xmlhttp.readyState的值及解释:0:请求未初始化(还没有调用 open())。1:请求已经建立,但是还没有发送(还没有调用 send())。2:请求已发送,正在处理中(通常现在可以从响应中获取内容头)。3:请求在处理中;通常响应中已有部分数据可用了,但是服务器还没有完成响应的生成。4:响应已完成;您可以获取并使用服务器的响应了。xmlhttp.ready

2016-04-01 10:14:57 320

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除