自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(93)
  • 资源 (5)
  • 收藏
  • 关注

原创 Reactor 模式的 Java 实现(feat. Scalable IO in Java - Doug Lea)

单 Reactor 多线程的情况下,可能会有这样的情况发生:Handler 线程池中业务处理很快,大部分的时间都花在 Reactor 线程处理 I/O 上,导致 CPU 闲置,降低了响应速度。这里也应用分而治之的优化方法,把 I/O 处理的步骤从 Reactor 线程中拆分出来,用线程池去处理,Reactor 作用就是要迅速的触发 Handler ,在单线程 Reactor 中,Handler 与 Reactor 处于同一线程,Handler 进行业务处理的过程会导致 Reactor 变慢。

2024-08-28 01:54:28 861 1

原创 Rocketmq 5 分级存储 Tieredstore(RIP-57、RIP-65) 原理详解 & 源码解析

所以重排之后的结构就呼之欲出:原来 hash 槽的链表项,在文件中的位置是随机的,通过链表指针的方式连接起来。分级存储的元数据是专门为了恢复分级存储文件引用而设置的,在分级存储相关的 Topic、Queue 或者 FileSegment 文件发生新建/删除时,索引文件会更新并持久化到本地文件中,在重启恢复分级存储模块时读取。在重启后,分级存储系统会读取持久化在本地的 Topic、Queue 元数据,在内存中重建 Queue,然后再读取文件句柄的元数据,在内存中恢复所有分级存储的文件句柄。

2024-04-29 01:37:52 478

原创 Rocketmq 5.0 任意时间定时消息(RIP-43) 原理详解 & 源码解析

Rocketmq 4.x 的延迟消息的原理简单来说是:将延迟消息先不存到真正的 Topic,先存到一个延迟 Topic,然后周期性扫描这个 Topic 还未投递的消息是否到期,到期则投递到真正的 Topic 中。4.x 的延迟消息有很大的局限性,它无法支持任意时间的定时,而且最大的定时时间也只有 2 小时,它的性能也达不到普通消息(后来 4.x 的延迟消息性能被优化,详见。前,会检查其的属性,如果消息属性中包含定时属性,则会将真正要投递的 Topic 暂存到消息属性中,把投递的 Topic 改成。

2023-08-09 20:41:46 657

原创 Rocketmq Filter 消息过滤(TAGS、SQL92)原理详解 & 源码解析

第一层根据消费队列过滤主要是用来在许多消费组之间筛选出有可能匹配的消费组,第二层过滤(消息详情过滤)则根据消费组设定的过滤表达式,根据消息的属性和 Tag 进行精确匹配过滤。通过这两个过滤方法,可以实现二层过滤,先根据较少的信息(消费队列)进行一次粗粒度的过滤,再根据完整的消息信息做精确过滤,这样能够减少精确过滤的次数,提升性能。具体的做法是,在消息生产时构造消费队列的过程当中,获取所有订阅该 Topic 的有过滤条件的消费组,预先根据这些消费组的过滤表达式进行一次精确匹配,计算出这条消息是否匹配。

2023-08-08 21:53:51 520

原创 Rocketmq Filter 消息过滤(TAGS、SQL92)原理详解 & 源码解析

第一层根据消费队列过滤主要是用来在许多消费组之间筛选出有可能匹配的消费组,第二层过滤(消息详情过滤)则根据消费组设定的过滤表达式,根据消息的属性和 Tag 进行精确匹配过滤。通过这两个过滤方法,可以实现二层过滤,先根据较少的信息(消费队列)进行一次粗粒度的过滤,再根据完整的消息信息做精确过滤,这样能够减少精确过滤的次数,提升性能。具体的做法是,在消息生产时构造消费队列的过程当中,获取所有订阅该 Topic 的有过滤条件的消费组,预先根据这些消费组的过滤表达式进行一次精确匹配,计算出这条消息是否匹配。

2023-08-08 21:52:57 457

原创 Rocketmq Filter 消息过滤(TAGS、SQL92)原理详解 & 源码解析

第一层根据消费队列过滤主要是用来在许多消费组之间筛选出有可能匹配的消费组,第二层过滤(消息详情过滤)则根据消费组设定的过滤表达式,根据消息的属性和 Tag 进行精确匹配过滤。通过这两个过滤方法,可以实现二层过滤,先根据较少的信息(消费队列)进行一次粗粒度的过滤,再根据完整的消息信息做精确过滤,这样能够减少精确过滤的次数,提升性能。具体的做法是,在消息生产时构造消费队列的过程当中,获取所有订阅该 Topic 的有过滤条件的消费组,预先根据这些消费组的过滤表达式进行一次精确匹配,计算出这条消息是否匹配。

2023-08-08 21:48:16 2368

原创 RocketMQ 消费者(2)客户端设计和启动流程详解 & 源码解析

1. 背景本文是 RocketMQ 消费者系列的第二篇,介绍消费者相关类与调用关系,同时包含消费者启动流程。看完本文能够对消息消费涉及到的相关类和消费流程有大体的了解。2. 概要设计2.1 消费者客户端设计先看一下 RocketMQ 客户端代码中消费者相关的类图。其中 DefaultMQPullConsumer 和 DefaultMQPushConsumer 就是我们实际消费中需要新建的消费者对象。它们分别实现了消费者接口,扩展了客户端配置类。新建 DefaultXXXXConsumer 对

2022-10-20 00:42:00 738 1

原创 RocketMQ 消费者(1)概念和消费流程

1. 背景RocketMQ 的消费可以算是 RocketMQ 的业务逻辑中最复杂的一块。这里面涉及到许多消费模式和特性。本想一篇文章写完,写到后面发现消费涉及到的内容太多,于是决定分多篇来写。本文作为消费系列的第一篇,主要讲述 RocketMQ 消费涉及到的模式和特性,也会概括性地讲一下消费流程。我将 RocketMQ 的消费流程大致分成 4 个步骤重平衡消费者拉取消息Broker 接收拉取请求后从存储中查询消息并返回消费者消费消息每个步骤都会用一篇文章来讲解。先了解一下 RocketM

2022-10-09 01:22:31 6834

原创 RocketMQ 消息发送设计和原理详解 源码剖析

1. 背景发送消息是 MQ 最基础的操作之一。RocketMQ 官方提供了多语言客户端支持消息的发送和消费操作。当然,消息发送并不仅仅牵扯到客户端操作。客户端做的是向 Broker 发送请求,请求中包含了消息的全部信息。而 Broker 需要处理客户端发送来的生产请求,将消息存储起来。在这篇文章中我将将解析消息发送流程中生产者和 Broker 的处理流程,揭秘 RocketMQ 消息发送高性能、高可靠的原理。2. 概述RocketMQ 的 Java 客户端提供了丰富的消息发送 API,支持多种消息

2022-06-22 23:54:17 1389

原创 RocketMQ NameServer 详解 源码剖析

[TOC]1. 概述1.1 NameServer 是什么NameServer 是组成 RocketMQ 的重要组件之一,是除了 Broker 之外另一个需要部署的服务。设想这样一个问题:RocketMQ 的 Topic 分布在不同的 Broker 上,作为消息的生产者和消费者,如何知道要从哪个 Broker 地址生产或消费消息?如果连接的 Broker 宕机了,如何在不重启的情况下感知?NameServer 就是为了解决这些问题设计的。NameServer 是一个简单的 Topic 路由注册中心,类

2022-06-09 00:01:29 1029

原创 RocketMQ 延迟消息(定时消息)4.9.3 版本优化 异步投递支持

[TOC]1. 概述在 RocketMQ 4.9.3 版本中,@Git-Yang 对延迟消息做了很大的优化,大幅度提升了延迟消息的性能。其中,PR#3287 将原先用来启动周期性任务的 Timer 改为使用 ScheduledExecutorService,将多延迟等级下同时发送延迟消息的性能提升了 3+ 倍。本文主要讲解的是另一个改动 PR#3458:支持延迟消息的异步投递。老版本中,延迟消息到期投递到 CommitLog 的动作是同步的,在 Dledger 模式下性能很差。新的改动将延迟消息的到

2022-05-24 00:41:41 836

原创 RocketMQ 4.9.3 版本 性能优化 源码剖析

[TOC]概述RocketMQ 4.9.1 版本 针对 Broker 做了一系列性能优化,提升了消息发送的 TPS。前文曾就 4.9.1 版本的优化做了深入分析。在 2022 年的 2 月底,RocketMQ 4.9.3 版本 发布,其对 Broker 做了更进一步的性能优化,本次优化中也包含了生产和消费性能的提升。本文将会详解 4.9.3 版本中的性能优化点。在 4.9.3 版本中对延迟消息的优化已经在另一篇文章中详解。本次和上次的性能优化主要由快手的黄理老师提交,在 ISSUE#3585 中集

2022-05-17 01:39:49 1075 1

原创 RocketMQ 如何实现高性能消息读写?

文章目录背景实现现高性能 IO 的手段1. 顺序读写1.1 顺序写1.2 读取消息2. 页缓存(Page Cache)3. MMap4. 预分配文件5. 文件预热6. 内存级读写分离 TransientStorePool参考资料背景RocketMQ 是一个低延迟、金融级稳定的高性能消息队列。它的性能处于消息队列的第一梯队,拥有接近 Kafka 的性能表现,每秒可以处理数十万的消息。那么 RocketMQ 是如何做到这么高的性能的呢?一方面,RocketMQ 借鉴了 Kafka 的实现,运用顺序读写、页

2022-04-11 00:39:23 1510

原创 RabbitMQ 镜像队列 使用和原理详解

文章目录1. 背景2. 镜像队列概述3. 使用方法和注意事项3.1 配置方法3.1.1 管理界面配置3.1.2 命令行3.1.3 HTTP API3.2 镜像队列配置观测3.3 配置参数3.3.1 镜像策略3.3.2 新镜像同步策略3.3.3 从节点晋升策略3.3.4 主队列选择策略3.4 注意事项3.4.1 多少个镜像才是最优的3.4.2 生产者确认和事务3.4.3 流控3.4.4 主节点失效和消费者取消4. 镜像队列原理4.1 镜像队列的数据流4.1.1 客户端连接主节点4.1.2 客户端连接从节点4.

2022-04-11 00:38:43 7208

原创 RocketMQ 过期文件删除机制 源码剖析

RocketMQ 的存储文件主要分三种:CommitLog、ConsumeQueue、IndexFileRocketMQ 的过期文件删除机制会定期删除已经过期的存储文件。当磁盘容量告急时,会立刻执行删除,释放磁盘空间。目前虽然有对于 RocketMQ 过期文件删除机制的文章,但我觉得没有讲的非常完善。本文详细分析一下三种存储文件的过期删除机制,避免一些坑。

2022-03-28 00:11:37 1264

原创 RocketMQ 延迟消息(定时消息)4.9.3 版本优化 异步投递支持

1. 概述在 RocketMQ 4.9.3 版本中,@Git-Yang 对延迟消息做了很大的优化,大幅度提升了延迟消息的性能。其中,PR#3287 将原先用来启动周期性任务的 Timer 改为使用 ScheduledExecutorService,将多延迟等级下同时发送延迟消息的性能提升了 3+ 倍。本文主要讲解的是另一个改动 PR#3458:支持延迟消息的异步投递。老版本中,延迟消息到期投递到 CommitLog 的动作是同步的,在 Dledger 模式下性能很差。新的改动将延迟消息的到期投递模式改

2022-03-20 23:48:57 688

原创 RabbitMQ Federation 插件使用

RabbitMQ Federation 插件可以将消息从一个 Exchange 复制到另一个 Exchange,或从一个 Queue 分发到另一个 Queue

2022-03-11 12:59:03 2442

原创 RocketMQ ConsumeQueue 消费队列文件

1. 概述1.1 ConsumeQueue 是什么ConsumeQueue,又称作消费队列,是 RocketMQ 存储系统的一部分,保存在磁盘中。该文件可以看作 CommitLog 关于消息消费的“索引”文件。ConsumeQueue 是一个 MappedFileQueue,即每个文件大小相同的内存映射文件队列。每个文件由大小和格式相同的索引项构成。每一个 Topic 的 Queue,都对应一个 ConsumeQueue。1.2 ConsumeQueue 的作用引入 ConsumeQueue

2022-03-01 22:47:06 2385

原创 RocketMQ 消息消费 轮询机制 PullRequestHoldService

1. 概述先来看看 RocketMQ 消费过程中的轮询机制是啥。首先需要补充一点消费相关的前置知识。1.1 消息消费方式RocketMQ 支持多种消费方式,包括 Push 模式和 Pull 模式Pull 模式:用户自己进行消息的拉取和消费进度的更新Push 模式:Broker 将新的消息自动发送给用户进行消费1.2 Push 消费模式我们一般使用 RocketMQ 时用的是 Push 模式,因为比较方便,不需要手动拉取消息和更新消费进度。那么你有没有想过 Push 模式是如何做到能够立即

2022-03-01 22:41:45 1874 1

原创 RocketMQ IndexFile 索引文件 源码解析

1. 概述1.1 索引文件是什么IndexFile,又可以称作索引文件,是 RocketMQ 保存在磁盘上的一种文件,属于 RocketMQ 存储的一部分。它的结构类似于类似 JDK中 HashMap。可以通过messageIndexEnable属性配置打开或关闭 IndexFile 存储功能。1.2 索引文件作用索引文件的应用场景其实比较局限,是为了提供按照 Message Key 查询消息的能力。索引文件可以通过 Message Key,查询到消息在 CommitLog 中的物理偏移量,进而从

2022-03-01 22:36:52 1018

原创 RocketMQ 4.9.1 性能优化 源码剖析

RocketMQ 4.9.1 版本针对 Broker 做了一些性能优化,这一批 PR 都挂载 [ISSUE#2883](https://github.com/apache/rocketmq/issues/2883) 下。

2022-01-31 22:26:10 1426

原创 LeetCode 7. Reverse Integer(数学)

LeetCode 7. Reverse Integer(数学)LeetCode 7 Reverse Integer数学问题描述解题思路参考代码By ScarbScarb’s BlogTags: - Math 问题描述Reverse digits of an integer.Example1: x = 123, return 321 Example2: x = -123, return

2017-06-07 02:31:55 441

原创 LeetCode 8. String to Integer (atoi)(字符串)

LeetCode 8. String to Integer (atoi)(字符串)

2017-06-07 02:31:36 599

原创 LeetCode 4. Median of Two Sorted Arrays(数组, 查找)

LeetCode 4. Median of Two Sorted Arrays(数组, 查找)LeetCode 4 Median of Two Sorted Arrays数组 查找问题描述解题思路参考代码By ScarbScarb’s BlogTags: - Binary Search - Array - Divide and Conquer问题描述There are two s

2017-05-29 13:39:43 453

原创 LeetCode 88. Merge Sorted Array

LeetCode 88. Merge Sorted ArrayLeetCode 88 Merge Sorted Array问题描述解题思路参考代码By ScarbScarb’s BlogTags: - Array - Two Pointers问题描述Given two sorted integer arrays nums1 and nums2, merge nums2 into nu

2017-05-28 17:17:18 512

原创 LeetCode 23. Merge k Sorted Lists(链表)

LeetCode 23. Merge k Sorted Lists(链表)LeetCode 23 Merge k Sorted Lists链表问题描述解题思路参考代码By ScarbScarb’s BlogTags: - Divide and Conquer - Linked List - Heap问题描述Merge k sorted linked lists and return

2017-05-28 17:16:59 526

原创 LeetCode 21. Merge Two Sorted Lists(链表)

LeetCode 21. Merge Two Sorted Lists(链表)LeetCode 21 Merge Two Sorted Lists链表问题描述解题思路参考代码By ScarbScarb’s BlogTags: - Linked List 问题描述Merge two sorted linked lists and return it as a new list. The n

2017-05-22 22:29:47 379

原创 LeetCode 19. Remove Nth Node From End of List(链表)

LeetCode 19. Remove Nth Node From End of List(链表)LeetCode 19 Remove Nth Node From End of List链表问题描述解题思路参考代码By ScarbScarb’s BlogTags: - Linked List - Two Pointers问题描述Given a linked list, remove

2017-05-21 00:05:42 372

原创 LeetCode 123. Best Time to Buy and Sell Stock III(动态规划)

LeetCode 123. Best Time to Buy and Sell Stock III(动态规划)LeetCode 123 Best Time to Buy and Sell Stock III动态规划问题描述解题思路参考代码By ScarbScarb’s BlogTags: - Array - Dynamic Programming问题描述Say you have a

2017-05-15 01:08:33 680

原创 LeetCode 14. Longest Common Prefix(字符串)

LeetCode 14. Longest Common Prefix(字符串)## 问题描述Write a function to find the longest common prefix string amongst an array of strings.## 解题思路题意是要找出一个字符串数组中最长的前缀公共子串。我先将字符串排序,最短的放最前面。然后遍历所有字符串,为最短字符串的每一位都分别与其

2017-05-06 01:17:03 356

原创 LeetCode 5. Longest Palindromic Substring(字符串)

LeetCode 5. Longest Palindromic Substring(字符串)LeetCode 5 Longest Palindromic Substring字符串## 解题思路遍历字符串的每一位,对每一位从中间展开,寻找该位(或者该位和下一位相同的情况就找该位和下一位)为中心的最长回文字符串。

2017-05-05 00:46:47 359

原创 cocos2d-x 编译不同版本VS的项目 检测到_MSC_VER的不匹配项:值"1800"不匹配值"1900"(xxxx.obj)

_MSC_VER 是VS编译器的版本MS VC++ 14.0 _MSC_VER = 1900 vs2015 平台是v140 MS VC++ 12.0 _MSC_VER = 1800 vs2013的编译器 平台是v120 MS VC++ 11.0 _MSC_VER = 1700 vs2012的编译器 平台是v110 MS VC++ 10.0 _MSC_VER = 16

2017-05-04 15:59:26 10820 2

原创 LeetCode 3. Longest Substring Without Repeating Characters(线性处理, 哈希)

LeetCode 3. Longest Substring Without Repeating Characters(线性处理, 哈希)1. 从左到右扫描字符串,读入每一位字符。当该位字符上一次出现的位置在`begin`之后,说明该字符重复。比较此时的字符串长度是否最长,如果是最长则赋给`max_len`。2. 然后将`begin`移动到上一个重复字符的下标+1的位置

2017-05-04 01:12:00 481

原创 Cocos2d-x lua 3.x VS集成Babelua 环境搭建与代码调试

Cocos2d-x lua 3.x VS集成Babelua 环境搭建与代码调试By ScarbScarb’s Blog最近开始学Cocos2d-x lua,Cocos2d-x lua 环境搭建坑好多,搭了好久。以此博客来记录一下。Cocos2d-x lua 3x VS集成Babelua 环境搭建与代码调试创建Cocos2d-x lua项目配置Visual Stuio BabeLua环境

2017-05-01 22:49:48 5466

原创 Cocos2d-x 内存管理机制

Cocos2d-x 内存管理机制By ScarbScarb’s BLog对Cocos2d-x的内存管理机制,之前一直不是很清楚。现在算是清楚多了,记一下笔记。Cocos2d-x 内存管理机制引用计数用autorelease方法声明一个智能指针参考资料1. 引用计数Cocos2d-x 所有对象几乎都继承自Ref基类,该基类主要进行引用计数管理。public: void reta

2017-05-01 22:09:43 435

原创 LeetCode 200. Number of Islands (并查集)

LeetCode 200. Number of Islands (并查集)LeetCode 200 Number of Islands 并查集问题描述解题思路参考代码Tags: * Depth-first Search * Breadth-first Search * Union Find问题描述Given a 2d grid map of ‘1’s (land) and ‘0’s

2017-04-30 18:42:28 636

原创 SVM 支持向量机 介绍与原理

SVM 支持向量机By Scarb数据挖掘课程的期末作业。学期末的时候太忙了,所以没有写博客发上来。隔了这么久终于想起来这个于是发一下。SVM 支持向量机什么是支持向量机SVM1 一个故事2 SVM 是什么SVM 的原理1 数据线性可分的情况11 超平面以及点到平面的距离12 marginSupport Vecotrs 间隔和支持向量13 求解最大边缘超平面2 数据线性不可分

2017-04-30 18:27:17 1405 1

原创 LeetCode 130. Surrounded Regions (并查集)

LeetCode 130. Surrounded Regions (并查集)LeetCode 130 Surrounded Regions 并查集问题描述解题思路参考代码Tags: - Breadth-first Search - Union Find问题描述Given a 2D board containing ‘X’ and ‘O’ (the letter O), captur

2017-04-29 23:05:40 886

原创 SC2Rank 星际2天梯排行榜 SpringMVC + Spring + Mybatis + Mysql + Maven java web项目

1. 简介1.1 源起我是星际2的忠实玩家。星际2原本有一个国服的天梯排行榜网站,也是由一位热心玩家写的。但是数据已经很久没有更新了。 所以星际2的国服天梯排行榜就成为了我心里想要完成的项目之一。 作为一个计算机专业的学生,我希望自己拥有制作网站的能力。同时这个暑假我参加了java web的培训(然而4天的培训并没有什么卵用,只是让我知道了做一个网站需要用什么工具以及大体的思路)。 那既然参加

2016-09-26 23:17:47 7011 1

转载 MySql语句大全:创建、授权、查询、修改等

林炳文Evankaka原创作品。转载请注明出处http://blog.csdn.net/evankaka一、用户创建、权限、删除1、连接MySQL操作连接:mysql -h 主机地址 -u 用户名 -p 用户密码 (注:u与root可以不用加空格,其它也一样)断开:exit (回车) 打开cmd,输入mysql -h 127.0.0.1 -u

2016-09-26 16:41:08 345

王道程序员面试宝典

王道程序员面试宝典,完整版,带目录,扫描版。 互联网公司面试笔试题目解析。

2018-06-12

C# WPF 计算器 有运算优先级

C#课作业,WPF制作的有运算优先级的计算器。有图形界面。 先将表达式转化为后缀表达式然后求解。

2015-12-06

cocos2d-x实现单摆运动状态的展示

使用cocos2d-x开发的有图形界面的单摆运动状态展示。 版本3.8. 实现了单摆周期求解、瞬时角速度求解,并且都展示在图形界面中。 可以改变摆线长度和摆角大小。 包含了代码和资源。

2015-12-06

BindImage3.02

BindImage特点 1.最优合并碎图到单张图片,比现在的Cocostudio,TexturePacker要小得多,节省不少内存和磁盘空间。 2.默认支持xml和plist格式描述文件,用于Cocos2d或者Cocos2dx,包括其他引擎用的xml。 3.支持生成PNG图片容量优化,尽可能的优化到最小,包括单独的批量优化容量。 4.支持合成图还原到碎图,并还原中心点,不会有信息丢失。 5.支持序列帧优化,移除多余类似帧,描述信息公用同张碎图。

2015-09-17

空空如也

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

TA关注的人

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