- 博客(265)
- 资源 (6)
- 收藏
- 关注
原创 rocketmq源码之consumer
文章目录2.5 Consumer2.5.1 消息消费概述2.5.2 消息消费初探2.5.3 消费者启动流程2.5.4 消息拉取1)PullMessageService实现机制2)ProcessQueue实现机制3)消息拉取基本流程1.客户端发起拉取请求2.消息服务端Broker组装消息3.消息拉取客户端处理消息4.消息拉取总结4)消息拉取长轮询机制分析2.5.5 消息队列负载与重新分布机制2.5.6 消息消费过程2.5.7 定时消息机制2.5.8 顺序消息2.5.9 小结2.5 Consumer2.5.
2022-05-19 20:00:00 323 1
原创 rocketmq源码之消息存储
文章目录2.4.1 消息存储核心类2.4.2 消息存储流程2.4.3 存储文件2.4.4 存储文件内存映射1)MappedFileQueue2)MappedFile3)TransientStorePool2.4.5 实时更新消息消费队列与索引文件1)转发到ConsumerQueue2)转发到Index2.4.6 消息队列和索引文件恢复1)存储文件加载2)正常恢复3)异常恢复2.4.7 刷盘机制同步刷盘异步刷盘2.4.8 过期文件删除机制2.4.9 小结2.4.1 消息存储核心类private fina
2022-05-18 21:30:00 463
原创 rocketmq源码分析之Producer
文章目录1.3.1 方法和属性1)主要方法介绍1.3.2 启动流程1.3.3 消息发送1)验证消息2)查找路由3)选择队列4)发送消息1.3.4 批量消息发送消息生产者的代码都在client模块中,相对于RocketMQ来讲,消息生产者就是客户端,也是消息的提供者。1.3.1 方法和属性1)主要方法介绍//创建主题void createTopic(final String key, final String newTopic, final int queueNum) throws MQCl
2022-05-17 14:01:22 462
原创 idea 源码启动rocketmq
文章目录1.1 环境搭建1.1.1 源码拉取1.1.2 导入IDEA1.1.3 调试1)启动NameServer2)启动Broker3)发送消息4)消费消息2.1 rocketmq dashboard搭建1.1 环境搭建依赖工具JDK :1.8+MavenIntelliJ IDEA1.1.1 源码拉取从官方仓库 https://github.com/apache/rocketmq clone或者download源码。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(i
2022-05-16 21:15:00 580
原创 rocketmq相关总结
文章目录1.1 消息存储1.1.1 存储介质1.1.3 消息的存储和发送1)消息存储2)消息发送1.1.4 消息存储结构1.1.5 刷盘机制1)同步刷盘2)异步刷盘1.2 高可用性机制1.2.1 消息消费高可用1.2.2 消息发送高可用1.2.3 消息主从复制1.3 负载均衡1.3.1 Producer负载均衡1.3.2 Consumer负载均衡1)集群模式1.4 消息重试1.4.1 顺序消息的重试1.4.2 无序消息的重试1)重试次数2)配置方式1.5 死信队列1.5.1 死信特性1.5.2 查看死信信息
2022-05-16 20:00:00 212
原创 rocketmq源码分析之NameServer、Broker
文章目录1.2.1 架构设计1.2.2 启动流程步骤一步骤二步骤三1.2.3 路由管理1.2.3.1 路由元信息1.2.3.2 路由注册1)发送心跳包2)处理心跳包1.2.3.3 路由删除1.2.3.4 路由发现1.2.4 小结1.2.1 架构设计消息中间件的设计思路一般是基于主题订阅发布的机制,消息生产者(Producer)发送某一个主题到消息服务器,消息服务器负责将消息持久化存储,消息消费者(Consumer)订阅该兴趣的主题,消息服务器根据订阅信息(路由信息)将消息推送到消费者(Push模式)或者
2022-05-16 18:15:01 1115
原创 Netty内存分配之ByteBuf
文章目录1.1初始认识ByteBuf1.1.1 ByteBuf的基础结构1.1.2 ByteBuf的基本分类1.2 ByteBufAllocator内存管理器1.3 非池化内存内存分配1.3.1 堆内内存的分配1.1初始认识ByteBufByteBuf主要负责把数据从底层I/O读到ByteBuf,然后传递给应用程序,应用程序处理完成之后再把数据封装成ByteBuf写回I/O。1.1.1 ByteBuf的基础结构我们来看netty * +-------------------+------
2022-05-05 15:16:37 1320
原创 netty 优化与源码
文章目录1. 优化1.1 扩展序列化算法1.2 参数调优1)CONNECT_TIMEOUT_MILLIS2)SO_BACKLOG3)ulimit -n4)TCP_NODELAY5)SO_SNDBUF & SO_RCVBUF6)ALLOCATOR7)RCVBUF_ALLOCATOR1.3 RPC 框架1)准备工作2)服务器 handler3)客户端代码第一版4)客户端 handler 第一版5)客户端代码 第二版6)客户端 handler 第二版2. 源码分析2.1 启动剖析2.2 NioEventL
2022-05-02 11:13:46 241
原创 netty 进阶
文章目录1. 粘包与半包1.1 粘包现象1.2 半包现象1.3 现象分析1.4 解决方案方法1,短链接方法2,固定长度方法3,固定分隔符方法4,预设长度2. 协议设计与解析2.1 为什么需要协议?2.2 redis 协议举例2.3 http 协议举例2.4 自定义协议要素编解码器💡 什么时候可以加 @Sharable3. 聊天室案例3.1 聊天室业务介绍3.2 聊天室业务-登录3.3 聊天室业务-单聊3.4 聊天室业务-群聊3.5 聊天室业务-退出3.6 聊天室业务-空闲检测连接假死1. 粘包与半包1.
2022-04-27 22:22:55 297
原创 Netty入门
文章目录二. Netty 入门1. 概述1.1 Netty 是什么?1.2 Netty 的作者1.3 Netty 的地位1.4 Netty 的优势2. Hello World2.1 目标2.2 服务器端2.3 客户端2.4 流程梳理💡 提示3. 组件3.1 EventLoop💡 优雅关闭演示 NioEventLoop 处理 io 事件💡 handler 执行中如何换人?演示 NioEventLoop 处理普通任务演示 NioEventLoop 处理定时任务3.2 ChannelChannelFutureCl
2022-04-23 21:28:48 309
原创 NIO 基础总结
文章目录一. NIO 基础1. 三大组件1.1 Channel & Buffer1.2 Selector多线程版设计⚠️ 多线程版缺点线程池版设计⚠️ 线程池版缺点selector 版设计2. ByteBuffer2.1 ByteBuffer 正确使用姿势2.2 ByteBuffer 结构💡 调试工具类2.3 ByteBuffer 常见方法分配空间向 buffer 写入数据从 buffer 读取数据mark 和 reset字符串与 ByteBuffer 互转⚠️ Buffer 的线程安全2.4 S
2022-04-23 15:52:22 403
原创 单机canal监听binlog
文章目录简介环境部署MySQLCanal安装Canal客户端开发创建client_demo项目Maven依赖在canal_demo模块创建包结构开发步骤Canal消息格式转换为JSON数据简介基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费早期阿里巴巴因为杭州和美国双机房部署,存在跨机房同步的业务需求,实现方式主要是基于业务 trigger(触发器) 获取增量变更从 2010 年开始,业务逐步尝试数据库日志解析获取增量变更进行同步,由此衍生出了大量的数据库增量订阅和消费业务,
2022-04-11 09:12:52 775
原创 Apache Druid 总结
文章目录Druid架构与原理Druid系统架构详解索引服务Overlord节点MiddleManager节点Coordinator节点Historical节点Broker节点Druid数据存储数据存储数据分区SegmentSegment内部存储结构roll-up聚合位图索引Druid架构与原理Druid系统架构详解Druid有5种节点:OverlordMiddleManagerCoordinatorHistoricalBroker以下是这几个节点的主要功能:Overlord、Mid
2022-04-10 11:14:53 562
原创 kafka相关总结
文章目录Kafka的应用场景消息队列的两种模型Kafka中的重要概念事务消息生产者分区写入策略消费组Consumer Group Rebalance机制消费者的分区分配策略副本的ACK机制高级API(High-Level API)、低级API(Low-Level API)leader和followerAR\ISR\OSRleader选举Kafka读写流程Kafka的物理存储消息传递的语义性Kafka的消息不丢失数据积压数据清理&配额限速Kafka的应用场景异步处理系统解耦流量削峰日志处理
2022-03-10 18:05:50 207
原创 redis相关总结
文章目录Redis过期key是怎么样清理的?LRU算法LFU算法Redis的性能为什么这么高?Linux中IO模型一共有哪些?epoll水平触发和边缘触发的区别?同步与异步的区别是什么?阻塞与非阻塞的区别是什么?BIO,NIO,AIO有什么区别?如何解决Redis缓存穿透问题?如何解决Redis缓存击穿问题?如何解决Redis缓存雪崩问题?如何解决缓存与数据库的数据一致性问题?Redis过期key是怎么样清理的?惰性清除在访问key时,如果发现key已经过期,那么会将key删除。定时清理R
2022-03-06 21:34:03 769
原创 常见限流算法总结
文章目录概述固定窗口计数器算法滑动窗口计数器算法令牌桶算法漏桶算法限流算法对比Sentinel的限流与Gateway的限流有什么差别?概述限流算法常见的包括:计数器算法,又包括窗口计数器算法、滑动窗口计数器算法令牌桶算法(Token Bucket)漏桶算法(Leaky Bucket)固定窗口计数器算法固定窗口计数器算法概念如下:将时间划分为多个窗口,窗口时间跨度称为Interval,本例中为1000ms;每个窗口维护一个计数器,每有一次请求就将计数器加一,限流就是设置计数器阈值,本.
2022-03-05 19:24:01 389
原创 Sentinel使用总结
文章目录1.初识Sentinel1.1.雪崩问题及解决方案1.1.1.雪崩问题1.1.2.超时处理1.1.3.仓壁模式1.1.4.断路器1.1.5.限流1.1.6.总结1.2.服务保护技术对比1.3.Sentinel介绍和安装1.3.1.初识Sentinel1.3.2.安装Sentinel1.4.微服务整合Sentinel2.流量控制2.1.簇点链路2.1.快速入门2.1.1.示例2.1.2.练习:2.2.流控模式2.2.1.关联模式2.2.2.链路模式1)添加查询商品方法2)查询订单时,查询商品3)新增订
2022-03-05 16:32:41 748 1
原创 AQS总结
文章目录概述主要用到 AQS 的并发工具类ReentrantLock 原理非公平锁实现原理公平锁加锁过程条件变量实现原理概述全称是 AbstractQueuedSynchronizer,是阻塞式锁和相关的同步器工具的框架。特点:用 state 属性来表示资源的状态(分独占模式和共享模式),子类需要定义如何维护这个状态,控制如何获取锁和释放锁getState - 获取 state 状态setState - 设置 state 状态compareAndSetState - cas 机制设置 .
2022-03-03 17:35:10 276
原创 synchronized 总结
文章目录Monitor 原理synchronized 原理Monitor 原理每个 Java 对象都可以关联一个 Monitor 对象,如果使用 synchronized 给对象上锁(重量级)之后,该对象头的Mark Word 中就被设置指向 Monitor 对象的指针。Monitor 结构如下:刚开始 Monitor 中 Owner 为 null当 Thread-2 执行 synchronized(obj) 就会将 Monitor 的所有者 Owner 置为 Thread-2,Monito.
2022-02-26 22:20:51 429
原创 索引及常见SQL优化总结
文章目录索引概述介绍优缺点索引结构二叉树B-Tree(多路平衡查找树)B+TreeHashHash索引特点存储引擎支持为什么InnoDB存储引擎选择使用B+tree索引结构?索引分类InnoDB主键索引的B+tree高度为多高呢?索引语法创建索引查看索引删除索引SQL性能分析SQL执行频率慢查询日志profile详情explain执行计划索引使用最左前缀法则范围查询索引列运算字符串不加引号模糊查询or连接的条件数据分布影响SQL提示覆盖索引前缀索引单列索引与联合索引SQL优化插入数据insert优化主键优化
2022-02-25 13:05:33 1029 1
原创 浅析Innodb架构
逻辑结构默认的表空间位置在/var/lib/mysql架构内存架构show variables like ‘%hash_index%’; 默认是关闭的。查看默认缓冲区大小mysql> show variables like '%log_buffer_size%';+------------------------+----------+| Variable_name | Value |+--------------------
2022-02-22 23:30:00 1292
原创 浅析Innodb中MVCC
文章目录MVCC-基本概念MVCC-实现原理MVCC-基本概念当前读读取的是记录的最新版本,读取时还要保证其他并发事务不能修改当前记录,会对读取的记录进行加锁。对于我们日常的操作,如:select ... lock in share mode(共享锁),select ... for update、update、insert、delete(排他锁)都是一种当前读。快照读简单的select(不加锁)就是快照读,快照读,读取的是记录数据的可见版本,有可能是历史数据,不加锁,是非阻塞读。Re
2022-02-22 23:15:00 314
原创 浅析事务原理
文章目录事务原理redo log 持久性undo log 原子性事务原理事务事务 是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。特性原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态。隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的
2022-02-22 22:00:00 1401
原创 mysql锁相关
文章目录概述全局锁表级锁表锁元数据锁( meta data lock, MDL)意向锁行级锁概述介绍锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(CPU、RAM、I/O)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。分类MySQL中的锁,按照锁的粒度分,分为以下三类:全局锁:.
2022-02-18 22:14:09 696
原创 Java线程相关总结
六种状态及转换分别是新建当一个线程对象被创建,但还未调用 start 方法时处于新建状态此时未与操作系统底层线程关联可运行调用了 start 方法,就会由新建进入可运行此时与底层线程关联,由操作系统调度执行终结线程内代码已经执行完毕,由可运行进入终结此时会取消与底层线程关联阻塞当获取锁失败后,由可运行进入 Monitor 的阻塞队列阻塞,此时不占用 cpu 时间当持锁线程释放锁时,会按照一定规则唤醒阻塞队列中的阻塞线程,唤醒后的线程进入可运行状态等待.
2022-02-11 23:30:00 704
原创 java中volatile总结
原子性起因:多线程下,不同线程的指令发生了交错导致的共享变量的读写混乱解决:用悲观锁或乐观锁解决,volatile 并不能解决原子性可见性起因:由于编译器优化、或缓存优化、或 CPU 指令重排序优化导致的对共享变量所做的修改另外的线程看不到解决:用 volatile 修饰共享变量,能够防止编译器等优化发生,让一个线程对共享变量的修改对另一个线程可见有序性起因:由于编译器优化、或缓存优化、或 CPU 指令重排序优化导致指令的实际执行顺序与编写顺序不一致解决:用 volatile 修.
2022-02-11 16:38:48 529
原创 wait 和 sleep比较
文章目录一个共同点,三个不同点共同点不同点代码示例一个共同点,三个不同点共同点wait() ,wait(long) 和 sleep(long) 的效果都是让当前线程暂时放弃 CPU 的使用权,进入阻塞状态不同点方法归属不同sleep(long) 是 Thread 的静态方法而 wait(),wait(long) 都是 Object 的成员方法,每个对象都有醒来时机不同执行 sleep(long) 和 wait(long) 的线程都会在等待相应毫秒后醒来wait(lon.
2022-02-11 15:09:08 689
原创 java中出现OOM情况总结
前言除了程序计数器外,虚拟机内存的其他几个运行时区域都有发生OutOfMemoryError(OOM)异常的可能。Java Heap 溢出
2022-02-10 23:30:00 1841 1
原创 java 代码的执行理解JVM内存划分
结合一段 java 代码的执行理解内存划分执行 javac 命令编译源代码为字节码执行 java 命令创建 JVM,调用类加载子系统加载 class,将类的信息存入方法区创建 main 线程,使用的内存区域是 JVM 虚拟机栈,开始执行 main 方法代码如果遇到了未见过的类,会继续触发类加载过程,同样会存入方法区需要创建对象,会使用堆内存来存储对象不再使用的对象,会由垃圾回收器在内存不足时回收其内存调用方法时,方法内的局部变量、方法参数所使用的是 JVM 虚拟机栈中的栈帧内存调.
2022-02-10 23:15:00 459
原创 方法区、永久代、元空间
方法区是 JVM 规范中定义的一块内存区域,用来存储类元数据、方法字节码、即时编译器需要的信息等永久代是 Hotspot 虚拟机对 JVM 规范的实现(1.8 之前)元空间是 Hotspot 虚拟机对 JVM 规范的另一种实现(1.8 以后),使用本地内存作为这些信息的存储空间从这张图学到三点当第一次用到某个类是,由类加载器将 class 文件的类元信息读入,并存储于元空间X,Y 的类元信息是存储于元空间中,无法直接访问可以用 X.class,Y.class 间接访问类元信息,它们俩属..
2022-02-10 23:15:00 589
原创 Hashtable vs ConcurrentHashMap
Hashtable 对比 ConcurrentHashMapHashtable 与 ConcurrentHashMap 都是线程安全的 Map 集合Hashtable 并发度低,整个 Hashtable 对应一把锁,同一时刻,只能有一个线程操作它ConcurrentHashMap 并发度高,整个 ConcurrentHashMap 对应多把锁,只要线程访问的是不同锁,那么不会冲突ConcurrentHashMap 1.7**数据结构:Segment(大数组) + HashEntry(小数组.
2022-02-10 17:05:15 589
原创 java中四种引用
文章目录强引用软引用(SoftReference)弱引用(WeakReference)虚引用(PhantomReference)演示虚引用的基本用法模拟 ThreadLocalMap, 采用引用队列释放 entry 内存强引用普通变量赋值即为强引用,如 A a = new A();通过 GC Root 的引用链,如果强引用不到该对象,该对象才能被回收软引用(SoftReference)例如:SoftReference a = new SoftReference(new A()).
2022-02-09 15:06:27 306
原创 Spring bean 循环依赖
文章目录循环依赖的产生构造循环依赖的解决思路1思路2示例1:用 @Lazy 为构造方法参数生成代理示例2:用 ObjectProvider 延迟依赖对象的创建示例3:用 @Scope 产生代理示例4:用 Provider 接口解决解决 set 循环依赖的原理一级缓存一级缓存与循环依赖二级缓存二级缓存与创建代理三级缓存循环依赖的产生首先要明白,bean 的创建要遵循一定的步骤,必须是创建、注入、初始化三步,这些顺序不能乱set 方法(包括成员变量)的循环依赖如图所示可以在「a 创建」和「.
2022-02-08 15:09:39 565
原创 Spring中使用事务失效的场景
文章目录抛出检查异常导致事务不能正确回滚业务方法内自己 try-catch 异常导致事务不能正确回滚aop 切面顺序导致导致事务不能正确回滚非 public 方法导致的事务失效父子容器导致的事务失效调用本类方法导致传播行为失效@Transactional 没有保证原子行为@Transactional 方法导致的 synchronized 失效抛出检查异常导致事务不能正确回滚@Servicepublic class Service1 { @Autowired private Acco.
2022-02-07 23:30:00 375
原创 排序相关总结
文章目录冒泡排序算法描述算法实现进一步优化选择排序算法描述算法实现与冒泡排序比较冒泡排序算法描述依次比较数组中相邻两个元素大小,若 a[j] > a[j+1],则交换两个元素,两两都比较一遍称为一轮冒泡,结果是让最大的元素排至最后重复以上步骤,直到整个数组有序算法实现public static void bubble(int[] a) { for (int j = 0; j < a.length - 1; j++) { // 一轮冒泡 b.
2022-02-04 21:50:52 652
原创 二分查找总结
文章目录二分查找算法描述算法实现测试代码解决整数溢出问题其它总结二分查找算法描述前提:有已排序数组 A(假设已经做好)定义左边界 L、右边界 R,确定搜索范围,循环执行二分查找(3、4两步)获取中间索引 M = Floor((L+R) /2)中间索引的值 A[M] 与待搜索的值 T 进行比较① A[M] == T 表示找到,返回中间索引② A[M] > T,中间值右侧的其它元素都大于 T,无需比较,中间索引左边去找,M - 1 设置为右边界,重新查找③ A[M] .
2022-02-04 21:27:05 126
原创 java中HashMap总结
文章目录基本数据结构树化与退化索引计算put 与扩容并发问题key 的设计String 对象的 hashCode() 设计基本数据结构1.7 数组 + 链表1.8 数组 + (链表 | 红黑树)树化与退化树化意义红黑树用来避免 DoS 攻击,防止链表超长时性能下降,树化应当是偶然情况,是保底策略hash 表的查找,更新的时间复杂度是 O(1)O(1)O(1),而红黑树的查找,更新的时间复杂度是 O(log2n)O(log_2n )O(log2n),TreeNode 占用空间也比.
2022-02-03 21:32:26 672
原创 java finalize原理
文章目录finalizefinalize 原理finalize 缺点finalize它是 Object 中的一个方法,如果子类重写它,垃圾回收时此方法会被调用,可以在其中进行资源释放和清理工作将资源释放和清理放在 finalize 方法中非常不好,非常影响性能,严重时甚至会引起 OOM,从 Java9 开始就被标注为 @Deprecated,不建议被使用了finalize 原理对 finalize 方法进行处理的核心逻辑位于 java.lang.ref.Finalizer 类中,它包含了名.
2022-02-03 20:56:23 1221
原创 HBase数据结构
文章目录跳表常见树结构二叉搜索树(Binary Search Tree)什么是二叉搜索树?树的高度、深度、层数二叉搜索树的特点二叉搜索树的查询方式二叉搜索树的缺点平衡二叉树(Balance Binary Tree)简介平衡二叉树的特点红黑树简介红黑树的特点B树什么是B树B树的特点B-树的查找方式B+树结构B+树简介B+树的特点稠密索引和稀疏索引LSM树数据结构简介LSM树设计思想LSM的数据写入操作LSM的数据查询操作在分析HBase的LSM合并树之前,我们需要来了解一些常用的数据结构知识。跳表上.
2022-02-02 16:59:41 113
apache-skywalking-apm-6.5.0.tar.gz
2020-04-03
lombok-plugin-0.28-2019.3.zip
2020-01-27
Navicat.for.MongoDB.12.1.7.rar
2020-01-06
Navicat for MySQL v12.0.29.zip
2020-01-05
Xshell.zip
2020-01-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人