自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 RocketMQ之 CommitLog 加载流程

commitlog 加载当我们把 broker 重启后,RocketMQ 是如何重新将磁盘的 commitlog 文件重新加载到磁盘中的呢?带着这个疑问,我们来看一下 commitlog 的加载流程commitlog 的加载流程大致如下:我们在这里主要关心 第1,2 个流程。第 3 个流程,在讲解完 ConsumeQueue, IndexFile 会重点说明。稍微带下第3个流程,第 3 个流程逻辑为,将 commitlog 存入到 consumeQueue。 这里的 commitlog 是未被转发

2021-06-27 20:39:45 379

原创 RocketMQ之 CommitLog

1 消息存储概述RocketMQ 的存储文件,放在 ${ROCKET_HOME}/store 目录下。当生产者发送消息时,broker 会将消息存储到 commit 文件下,然后再异步的转存到 consumeQueue 以及 indexFile。commitlog消息主体以及元数据的存储主体。Producer 发送的消息就存放在 commitlog 里面.consumeQueue消息消费队列,引入的目的主要是提高消息消费的性能,由于 RocketMQ 是基于主题 topic 的订阅模式,消息消费

2021-06-27 20:37:58 5886

原创 RocketMQ之 Producer

producer 发送流程producer 在消息发送时,肯定要先知道 topic 的信息,以及 topic 在哪个 broker 上,那么 producer 是如何做的呢?还记得在 01 开篇说的吗? namesrv 提供一个通过 topic 获取路由信息的接口(RouteInfoManager#pickupTopicRouteData). producer 就是根据该接口返回的 TopicRouteData, 知道要将 topic 发送至哪个 broker.TopicRouteDatapriva

2021-06-27 20:31:37 655

原创 RocketMQ之 namesrv

整体架构从架构设计图来看,namesrv 充当的角色为注册中心,broker 向 namesrv 注册。producer、consumer 分别与 namesrv 保持长连接, 并从 namesrv 中拉取 broker 信息,然后再与namesrv 之间是不互相通信的,他们各自持有 broker 的注册信息。在分布式领域中,正常集群部署,都会有主从、或者有 leader 节点。但是对于 namesrv,它每个节点都是独立的,每个 namesrv 节点都是互不通信。rocketMQ 在注册中心这一

2021-06-27 20:30:11 1725

原创 二、SpringBoot 整合 Dubbo 进阶,Provider 不使用 web 容器启动

demo github 地址0、docker 启动 zkdocker-compose.ymlversion: '3'services: zoo1: image: zookeeper restart: always hostname: zoo1 ports: - 2181:2181docker-compose up -d1、创建父 pom<?xml version="1.0" encoding="UTF-8"?><proje

2021-03-12 23:31:23 487

原创 一、SpringBoot 整合 Dubbo 光速入门

0、docker 启动 zkdocker-compose.ymlversion: '3'services: zoo1: image: zookeeper restart: always hostname: zoo1 ports: - 2181:2181docker-compose up -d1、创建父 pom<?xml version="1.0" encoding="UTF-8"?><project xmlns="http:

2021-03-12 23:30:07 207 1

原创 Redis 持久化之 rdb

1、rdb 解决了什么问题?rdb 是 redis 持久化其中的一种方案,通过快照的方式,可将内存的数据 dump 到磁盘上。2、如何使用 rdb2.1、save 与 bgsave当客户端执行 save or bgsave 时, 服务端会将当前内存中的数据 dump 到文件上。save 会拒绝客户端所有的命令,直到服务端执行完 save 后,才能响应客户端命令。bgsave 命令不会阻塞客户端的读写命令。2.2、自动触发 bgsave2.2.1、开启自动触发 bgsave在 redis 中

2021-03-07 11:37:01 232

原创 JVM - OOM

既然选择了远方,即使天寒地冻,路遥马亡,我本就一无所有,又有何惧。OOM(内存溢出)是一个让人很头疼的问题,出现 OOM 的问题有很多,下面就 OOM 可能出现的原因进行介绍。1、堆空间太小用以下参数启动 jvm-Xms20m -Xmx20mpublic class OOMTest { public static void main(String[] args) { Byte[] bs = new Byte[1024 * 1024 * 30]; }}最大堆.

2021-01-01 15:03:47 141

原创 JVM - 垃圾回收器概述

文章目录串行收集器新生代串行收集器老年代串行收集器并行收集器ParNewParallelGCParallelOldGCCMS初始化标记并发标记预清理重新标记并发清理concurrent mode failure主要参数垃圾回收器组合参考既然选择了远方,即使天寒地冻,路遥马亡,我本就一无所有,又有何惧。串行收集器单线程、独占式进行垃圾回收独占式:应用程序线程会停止工作,只有垃圾回收线程在工作,即 stop the world。在并行能力较差的机器上,会有更好的性能表现。新生代串行收集器

2020-12-26 19:02:39 76

原创 JVM - 垃圾回收算法概述

文章目录标记清除法复制算法标记压缩法分代算法卡表分区算法既然选择了远方,即使天寒地冻,路遥马亡,我本就一无所有,又有何惧。标记清除法标记清除算法工作分为 2 个阶段。第一个阶段,先根据 GC Root 标记 可达对象第二阶段,将不可达对象,直接清除。算法缺点:会产生大量的内存碎片工作原理如下图所示:复制算法复制算法思想:将内存一分为二,每次只使用其中一块。发生垃圾回收时,将存活的对象复制到另一块未使用的内存清空使用的内存块中的对象,两者角色互换,完成垃圾回收。复制算法,用

2020-12-21 23:27:58 123

原创 JVM - 垃圾回收概述

文章目录引用计数法循环引用GC Root 可达性分析根对象定义通过 finalize() 复活糟糕的 finalize引用队列参考'深入交流'我是清都山水郎,天教懒慢带疏狂。曾批给露支风券,累奏流云借月章。 诗万首,酒千觞,几曾着眼看侯王。玉楼金阙慵归去,且插梅花醉洛阳。在进行垃圾回收的时候,对于 JVM 而言,什么对象才算是垃圾呢?如何判断某些对象是垃圾呢?很明显的,已经没有被使用的对象,就是垃圾。引用计数法引用计数法是用于判断对象是垃圾的一种方式。如果被其他对象引用,那么对象的引用计数就

2020-12-16 06:48:28 145

原创 java 注释规范

我是清都山水郎,天教懒慢带疏狂。曾批给露支风券,累奏流云借月章。诗万首,酒千觞,几曾着眼看侯王。玉楼金阙慵归去,且插梅花醉洛阳。文章目录1、概览2、注释介绍3、demo4、生成 Javadoc1、概览好的注释往往能减少提供协同开发的工作效率,以及极大的提升系统的可维护性。因此写好代码注释也是一个很重要的事情。Javadoc 一般分为三段:第一段:概要描述通常用一句话描述类或方法的作用,且以 . 结尾第二段:详细描述第三段:文档标注,用于标注作者、创建时间、参阅类等信息。效果图[.

2020-12-10 21:10:02 80

原创 JMH -- JAVA 微基准测试工具套件

文章目录1、概览2、jmh 简介3、jmh 使用demo4、jmh 常用设置介绍5、注意事项你的努力,终将成就无可替代的自己将来的你一定会感谢现在拼命的自己1、概览在日常开发中,我们往往需要优化我们自己写的代码。优化后的代码,执行效率是否比之前的还高?具体高多少?这些都是需要去测量。目前比较主流的做法是使用 jmh 进行微基准测试。2、jmh 简介jmh 是 java 用于微基准测试工具套件。主要是基于方法层面的基准测试,精度可达纳秒级。由 oracle 实现 JIT 大牛编写而成。在使

2020-12-08 21:59:55 167

原创 重温 JAVA -- ThreadLocal 终

文章目录ThreadLocal 是什么作用数据结构内存泄露?对象的四种引用类型WeakReference 案例介绍ThreadLocal 中的内存泄露ThreadLocal 清理机制探测式清理启发式清理如何预防结论ThreadLocal Hash 算法ThreadLocal Hash 冲突扩容灵魂拷问,为什么 ThreadLocalMap key 是弱引用?参考ThreadLocal 是什么作用ThreadLocal 用于存储线程间的私有变量数据结构内存泄露?要解释这个问题之前,需要先看 JA

2020-11-08 23:26:10 162

原创 重温 JAVA -- 阻塞队列 终

文章目录BlockingQueue添加删除其他总结有界阻塞队列ArrayBlockingQueueLinkedBlockingQueueSynchronousQueueLinkedBlockingDequeue共性无界阻塞队列PriorityBlockingQueueDelayQueueLinkedTransferQueue总结阻塞队列的道与术问题一:选择合适的数据结构问题二:容器满了,生产者如何实现不在生产;容器没元素,消费者如何实现不再消费问题三:生产者应该在什么时候唤醒消费者;消费者应该在什么时候唤醒

2020-11-03 23:08:38 92

原创 重温 JAVA -- synchronized 终

文章目录1、基本介绍1.1、类方法1.2、对象方法1.3、代码块1.4、ACC_SYNCHRONIZED、monitorenter、monitorexit2、对象头3、锁升级3.1、偏向锁3.1.1、偏向锁加锁3.1.2、偏向锁解锁3.1.3、撤销偏向锁3.2、轻量锁3.2.1、轻量锁加锁3.2.2、轻量锁解锁3.3、重量锁3.3.1、执行流程4、参考1、基本介绍synchronized 关键字用于实现多线程之间的同步操作。synchronized 可用于修饰 类方法, 对象方法, 代码块使用 sy

2020-10-27 23:38:26 87

原创 重学 JAVA -- AQS 终

文章目录1、入同步队列1.1、同步队列 数据结构1.2、入队列流程1.3 几个关于源码疑惑的解答2、出同步队列3、入等待队列3.1、等待队列数据结构3.2、入队列流程3.2.1 无参的 await3.2.2 带时间的 await3.3 几个关于源码疑惑的解答4、出等待队列1、入同步队列当 AQS 在尝试获取锁失败时,会将当前线程构造成 Node 节点,插入同步队列中。在说入队列操作之前,需要对 Node 的数据结构进行一下说明1.1、同步队列 数据结构同步队列 的数据结构为 双向链表。Node

2020-10-22 22:31:01 84

原创 kafka 系列 -- 7.2、日志索引

文章目录日志切分偏移量索引(.index)时间戳索引(.timeindex)与 RocketMQ 异同不同点kafka 的索引文件以稀疏索引的方式构造消息的索引,每个 segmentfault 文件,对应 2 个索引文件。偏移量索引文件(xx.index)用于建立消息偏移量到物理地址之间的映射关系;时间戳索引文件(xx.timeindex)根据指定的时间戳查找对应的偏移量信息。.index、.timeindex 均保持严格单调递增,在查找时,都使用二分查找法,如果查不到,均返回比查找值要小的最大值。日

2020-10-10 21:46:51 220

原创 kafka 系列 -- 7.1、日志存储

文章目录1、日志文件布局2、日志存储格式V0消息格式V1消息格式V23、消息压缩何时压缩何时解压缩1、日志文件布局__consumer_offset 存储着消费者提交的消费位移2、日志存储格式V0消息格式offset:每一条消息都有一个 offset 用来标志它在分区中的偏移量,offset 是逻辑值,而非实际物理偏移量message_size:表示消息的大小crc32(4B):crc32 校验值。校验范围为 magic 至 value 之间magic(1B)

2020-10-10 19:42:28 120

原创 kafka 系列 -- 5.1、分区管理

文章目录优先副本的选举分区自动平衡分区手动平衡分区重分配复制限流kafka-reassign-partitions.sh 限流修改副本因子优先副本的选举当我们输入以下命令,kafka-topics.sh --zookeeper zookeeper:2181 --describe --topic test4查看主题详情时,会展示如下信息其中 Replicas 就是 AR。现,我们将 brokerId 2 的机器重启,kafka 会从 Isr 副本中选出一个新的节点作为 leader, b

2020-08-23 11:01:15 203

原创 kafka 系列 -- 4.2、消费者分区策略

文章目录1、RangeAssignor2、RoundRobinAssignor3、StickyAssignor4、总结kafka 允许通过配置 partition.assignment.strategy 来改变消费组的分区策略。kafka 提供了以下几个分区策略RangeAssignorRoundRobinAssignorStickyAssignor默认使用的是 RangeAssignor同时,kafka 也允许我们自定义分区策略,只需要继承 AbstractPartitionAssign

2020-08-22 15:04:34 85

原创 kafka 系列 -- 4.1、消费者基本介绍

文章目录1、消费者食用DEMO2、消费者基本概念2.1、`partition` 分配2.2、`partition` 重分配3、消费者端 `API` 介绍3.1、订阅主题3.2、消息消费3.3、位移提交3.4、设置新消费组从哪个位置开始消费3.5、分区再均衡3.6、消费者拦截器3.7、重要的消费者参数4、总结5、与 RocketMQ 异同1、消费者食用DEMOProperties prop = new Properties();prop.put(ConsumerConfig.KEY_DESERIALIZ

2020-08-20 21:54:25 273

原创 kafka 系列 -- 3.2、生产者客户端原理分析

文章目录生产者发送消息的整体流程消息追加器 `RecordAccumulator``ProducerBatch` 批量消息`Sender` 线程`InFlightRequests`重要参数总结与 `RocketMQ` 区别知识补充`ByteBuffer``ByteBuffer` 重要属性`ByteBuffer` 基本方法`ByteBuffer` 食用DEMO`ArrayDeque`插入删除扩容生产者发送消息的整体流程消息追加器 RecordAccumulator前面几个组件,在 3.1 的文章中,已

2020-08-09 22:09:25 389

原创 kafka 系列 -- 3.1、生产者客户端基本使用

文章目录必要的参数生产者拦截器序列化分区器与 RocketMQ 异同必要的参数bootstrap.servers该参数为 broker 地址,不需要全部都填,因为 kafka 会从当前 broker 中获取其他 broker 信息。不过为了某个 broker 挂掉,一般填多个 broker 地址key.serializer消息 key 如何序列化value.serializer消息内容如何序列化示例代码Properties properties = new Properties();

2020-08-05 23:48:22 482

原创 kafka 系列 -- 2、搭建与实践

文章目录前言单机版 Docker 搭建集群版 + kafka managerkafka 集群 docker-composekafka-manager docker-compose基本操作springboot 连接 kafka相关文档前言动手实践往往比看看更重要????单机版 Docker 搭建version: '2' services: zookeeper: image: wurstmeister/zookeeper ports: - "2181:2181" k

2020-07-19 05:57:37 155

原创 kafka 系列 -- 1、基本概念

文章目录前言kafka 应用场景基本概念与 RocketMQ 区别前言思考的过程往往比直接得到结论更加重要kafka 应用场景应用监控网站用户行为追踪流数据持久性日志基本概念在说基本概念前,先看一下 kafka 的系统架构Broker一般而言,一台机器就是一个 broker,当然 1 台机器上可以部署多个 brokerProducer消息的生产者Consumer消息的消费者Consumer Group消费者组,组内可以有多个消费者,共享同一个 grou

2020-07-12 03:13:55 142

原创 springcloud 系列--了解一下 OpenFeign

文章目录写在前面Feign1、feign 如何完成对注解 @FeignClient 的加载的2、Fegin 一般是接口,它是如何完成动态代理的?2.1、未启用 Hystrix2.2、启用 Hystrix3、把大多数人难住的 OpenFeign 文件上传写在前面思考的过程往往比直接得到结论更加重要Feign对于 feign,无疑就是整合了 ribbon + hystrix,然后封装为对开发使用起来更加友好的 jar。因此本质上,feign 是 ribbon + hystrix. 因此,在学习 Feig

2020-06-25 23:14:02 266

原创 springcloud 系列 -- 简单了解一下 hystrix

文章目录写在前面1、为什么需要熔断器服务雪崩2、如果自己写一个断路器,你会怎么做呢?隔离策略快速失败限流统计熔断系统自适应保护扩展3、现有类似功能组件对比4、使用注意hystrix 超时设置hystrix 使用线程池隔离时,无法传递绑定在 tomcat 线程上下文的值写在前面思考的过程往往比直接得到结论更加重要1、为什么需要熔断器服务雪崩在分布式环境下,不可避免的就是服务之间的调用。A 调 B,B 可能会失败,如果此时 B 服务挂掉,那么会导致服务 A 因为服务 B 的失败而失败。从而导致 客户端

2020-06-07 22:21:45 160

原创 springcloud 系列-- 三言两语,带你认识 ribbon

前言ribbon 作为一个负载均衡组件,个人认为,其核心的功能就是提供多种负载均衡策略。暂停思考一下,如果让你自己写负载均衡组件,要如何做?获取有多少合适的服务可供负载服务有时候可能会不可用,那么需要更新维护服务,及时将不合理的服务剔除提供策略判断服务是否可用实现多种负载算法,供用户选择负载失败后的重试实际上, ribbon 的核心功能,也大概就是上面我说的这些。理论1、获取有多少合适的服务可供负载当今的应用,大多数部署在云上,并向全国各地提供服务。假设服务 A 在福建、北京均有部

2020-05-31 21:08:49 236

原创 springcloud 系列--用几张图,带你了解 eureka-server

写在前面不建议为了看源码而看源码,这样做无意义!其次,有时候了解工作机制即可,不一定得深入源码的每一个细节。更多的时候,看源码,只是工作需要。因此,源码分析,不会贴大量的源码,而只是给了流程 + 代码入口。看源码的工作,还是得自己去看。顶层设计EurekaServerConfig:eureka server 配置类的 抽象CodecWrapper:定义如何编码,解码。可通过 eureka ...

2020-05-04 00:24:28 344

原创 springcloud 系列 用几张图,带你了解 eureka-client

引言springcloud 通过 SPI 技术加载 spring.factories 文件中定义好的Bean。其中 EurekaClientAutoConfiguration 装入了 EurekaClient。 一个 EurekaClient 代表的就是我们的客户端,也是我们主要需要关心的对象。俯瞰Eureka-client 启动代码入口:DiscoveryClientDiscover...

2020-04-19 12:46:39 83

空空如也

空空如也

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

TA关注的人

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