自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(70)
  • 资源 (6)
  • 收藏
  • 关注

原创 RocketMQ5.x版本延迟消息被重放问题调查

RETRY%pugc-sofa-delete-video-flush-consumer这个topic在broker-cold-1上的消息量变成了34706,而消费量为17353,堆积量跟消费量相等。而在测试环境中,broker没多少数据,10秒内肯定已经启动完了,所以没有发现这个问题,而线上环境数据量一般都是上百G,通常启动比较慢。而发现堆积的topic都是之前消费有失败的,产生了重试消息的,而这些重试消息也是被消费完了的。但是在4.x的broker陆续升级至5.x的过程中,发现了延迟消息被重放的问题。

2023-06-09 14:45:26 1055

原创 found A Illegal MagicCode

一、背景主从模式部署的broker集群,主节点同步模式为:异步复制,刷盘方式为:异步刷盘。在主节点宕机重启后,从节点的store.log里大量出现了如下日志,并且在不断的输出:2022-05-11 14:00:55 WARN ReputMessageService - found a illegal magic code 0xe588a9e52022-05-11 14:00:55 WARN ReputMessageService - found a illegal magic code 0xe588

2022-05-18 11:11:26 745 3

原创 一条消息的一生

一、 消息的诞生消息,可以理解为异构系统数据交流的载体。它可以简单到只是一个单词:“Hello”,或是复杂的对象。每个生命的诞生都是一场考验,消息也不例外(这里的诞生是指消息成功发送并安全存储的过程)。准备工作 - 序列化由于RocketMQ是分布式的,其消息存储组件-broker承担着核心的存储工作。也就是说消息需要跨网络传输,才能到达broker。那么这就涉及到序列化工作了,何谓序列化?序列化就是把对象转化为字节数组的过程。为什么需要转换成字节数组呢?因为计算机存储和网络传输都只认字

2021-04-14 09:12:06 419

原创 ehcache之offheap部分重要类说明

PageSource页源,负责页分配,默认是的实现是:UpfrontAllocatingPageSource-预交付的page源。重要属性:List buffers = new ArrayList<>();存放分配好的内存块(chunk),最大1G。List<PowerOfTwoAllocator> sliceAllocators = new Arra...

2020-04-07 14:23:29 733

原创 ehcache之offheap

一、背景offheap作为摆脱gc的本地缓存来使用,对于缓存大量数据和提升应用的性能大有裨益。EHCache的offheap层直接使用了Terracotta-OSS开源的offheap-store作为底层实现。但是offheap-store包含了一系列的算法和数据结构的设计和使用,很多地方借鉴了操作系统的知识,比如内存分页设计,时钟置换算法,内存分配等等,由此可见涉及到内存管理的都是比较复杂...

2020-04-07 14:21:09 1822

原创 4.agent配置详解

所有的代码分析基于pinpoint 1.6.2常用配置profiler.sampling.enable=true是否进行采样,true表示开启采样,如果关闭采样,将不进行traceprofiler.sampling.rate=100采样率:表示每profiler.sampling.rate次请求,进行一次trace例如,100表示1/100,1表示每次请求都tracepr...

2020-01-03 17:12:55 5584

原创 3.agent通信

所有的代码分析基于pinpoint 1.6.2在上篇文章agent追踪已经分析到部分代码,这里进行一个详细的介绍。一、入口####在每次追踪完毕后,需要调用这个方法trace.traceBlockEnd(),此方法内部使用storage.store(spanEvent)来持久化SpanEvent。这里使用的storage是由StorageFactory创建的,而StorageFactory...

2020-01-03 17:11:27 716

原创 2.agent追踪

所有的代码分析基于pinpoint 1.6.2在上篇文章agent启动中最终分析到了织入部分,那么这里分析一下Trace部分。一、入口所有的trace的都从plugin进入,也就是说,如果对某个组件不支持的话,是不会进行trace的。这里以jetty的plugin为例,当一个请求过来时,有类似如下拦截代码(后置拦截在后面)://前置拦截public void before(Object...

2020-01-03 17:06:36 569

原创 1.agent启动

1 agent启动、加载、拦截织入所有的代码分析基于pinpoint 1.6.2pinpoint agent使用方式为-javaagent:$PINPOINT_PATH/pinpoint-bootstrap-{version}.jar,故从javaagent开始:一、jvm会调用PinpointBootStrap.premain方法,此方法做了如下操作:####将状态标志为启动(即同一j...

2020-01-03 16:48:51 2361

原创 springboot多数据源支持

mybatis+多数据源+多连接池配置网上大多配置都是mybatis+多数据源,并没有对应的多数据池,这里列举一个完整的例子,废话不多说,直接看代码1.pom.xmlpom里只用增加一个mybatis整合spring-boot的依赖:<dependency> <groupId>org.mybatis.spring.boot</groupId> &lt...

2020-01-03 16:42:36 240

原创 性能大比拼

一、创建euraka集群创建父项目,包含父pom文件和子项目,并增加依赖,主要是:spring-cloud-starter-parent<parent> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-parent&lt...

2020-01-03 16:35:32 534

原创 FeignClient

一、介绍一个普通的java接口,加上FeignClient注解,就可以完成整合hystrix,ribbon的http调用,使用上很是方便,也感觉很神奇,内部实现有必要探究一下。二、问题第一个问题:被@FeignClient标注的类,在spring中最终注入的是什么?第二个问题:如何跟hystrix结合的?第三个问题:如何跟ribbon结合的?第四个问题:调用过程?带着这四个问题,...

2020-01-03 16:05:19 1044

原创 4.调用关系及超时说明

调用关系图类似如下:User发起http请求,这里省略了controller的一层,只为表明RestTemplate的调用过程Hystrix采用aop拦截的方式,对标注HystrixCommand的方法进行拦截RestTemplate执行内部的拦截链,但是此拦截并非aop,只是普通的java连接链,类似于ServletFilterRibbon执行负载均衡,选择合适的server(包含...

2020-01-03 15:51:28 704

原创 3.结合ribbon

一、简介ribbon是一个支持http,tcp客户端的负责均衡库。二、引入在这里,结合spring-boot的方式,在pom中添加如下依赖:<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-rib...

2020-01-03 15:22:48 171

原创 2.结合hystrix

一、简介当http服务接口响应超时或调用http服务发生异常时,需要结合hystrix进行降级。二、引入在这里,结合spring-boot的方式,在pom中添加如下依赖:<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cl...

2020-01-03 15:13:14 98

原创 1.快速入门

一、简介RestTemplate是spring提供的http客户端模版,类似JdbcTemplate,它是线程安全的,支持切换不同的http客户端,目前支持HttpClient-4.3, OKHttp3, 基于netty4实现的http客户端和基于java的URLConnection实现的http客户端。二、引入RestTemplate默认已经包含在spring-web中,其默认采用java...

2020-01-03 15:02:44 215

原创 11.ribbon区域亲和

一、简介ribbon的区域亲和机制如下(需要说明一点,亲和性发生在过滤阶段,请参考负载均衡器中server列表是如何动态更新的部分):以上的图示及文字仅为举例说明,下面描述一下图上表示的流程:首先,先看右下角的provider集群,因为会分别部署在北京,上海,广州三个地区,把这里地区看作zone,故有三个zone。provider集群会把实例信息(ip+port+name等等)按照配置e...

2020-01-03 14:46:48 576

原创 10.重试

<!doctype html>tmp.md一、简介ribbon的重试是指consumer调用provider发生异常后,ribbon发起重试。RestTemplate和Feign使用的重试机制不一样,下面分开进行说明。二、RestTemplate重试RestTemplate都是spring-cloud来做的,内部依赖于spring-retry,增加如下配置打开重试机制...

2020-01-03 14:33:09 523

原创 9.与springcloud结合

一、简介使用ribbon,一般都是和springcloud结合使用,springcloud提供了胶水代码来整合ribbon。二、接口ServiceInstanceChooser该接口只有一个方法:public interface ServiceInstanceChooser { /** * Choose a ServiceInstance from the LoadBal...

2020-01-03 11:50:24 150

原创 8.负载均衡器

一、引子从负载均衡策略可以了解到ribbon实现的各种负载均衡策略,当然也可以自己实现相应的算法。其中主要的接口IRule中有个定义如下:public ILoadBalancer getLoadBalancer();算法使用的server列表以及状态信息都从它获取,这里,就从它开始。二、接口ILoadBalancer,从源码的注释中很容易看出,它定义负载均衡的操作,并对server进行存...

2020-01-03 11:43:55 406

原创 7.状态统计

一、简介这里的统计主要是触发远程调用的统计,跟负载均衡没啥关系,但是,负载均衡需要这些依赖这些统计信息做为判断的策略。统计类主要是LoadBalancerStats,其内部持有ServerStats对每个server的调用做了相关统计。二、实现成员变量1.1 LoadBalancerStats内部有两个成员变量,一是upServerListZoneMap,二是serverStatsCa...

2020-01-03 11:27:55 430

原创 6.ServerListFilter

一、简介从名字可以看出来,这个接口实现了server类别的过滤功能。二、接口接口比较简单,如下:public interface ServerListFilter<T extends Server> { public List<T> getFilteredListOfServers(List<T> servers);}入参为server列表...

2020-01-03 11:15:38 574

原创 5.ServerListUpdater

一、简介顾名思义,这个类用于server列表的更新。二、接口这个类定义的方法较多,这里只看两个重要的:public interface ServerListUpdater { /** * an interface for the updateAction that actually executes a server list update */ pub...

2020-01-03 11:08:25 1342

原创 4.ServerList

一、简介ServerList就是server的列表,我们知道,IRule做负载均衡的关键参数就是server列表,就是从这里获取的。二、接口其接口比较简单,定义了两个方法,如下:public interface ServerList<T extends Server> { public List<T> getInitialListOfServers(); ...

2020-01-03 11:00:20 2515

原创 3.ping

一、简介字如其名,ribbon采用IPing接口来探测server是否存活。二、接口接口很简单,代码如下:public interface IPing { public boolean isAlive(Server server);}IPing有好多实现(但是大部分都没啥用),如下:三、深入这里如果使用eureka的话,其默认的实现为NIWSDiscoveryPing(...

2020-01-03 10:56:20 174

原创 2.负载均衡策略

一、简介为什么一开始就需要了解这一块,原因就是这块涉及到的组件的调用关系相对独立,更容易理解,而这块也是ribbon的核心之一。二、接口ribbon的负载均衡最终都委托给了一个类来实现,那就是IRule,IRule负责不同的策略算法,接口定义如下:public interface IRule{ public Server choose(Object key); public...

2020-01-03 10:52:32 235

原创 1.ribbon

ribbon作为客户端负载均衡的重要组件,很有必要对其内部机制了解清楚,以便在生产中更熟练的应用。关于ribbon网上的源码分析很多,例如:http://blog.didispace.com/springcloud-sourcecode-ribbon/http://blog.csdn.net/forezp/article/details/74820899但是源码类文章读完更多时候是比较懵的...

2020-01-03 10:39:44 176

原创 slave同步master数据偏移量错误

一、背景master broker.log中出现如下日志:2019-12-03 17:42:06 INFO BrokerControllerScheduledThread1 - Slave fall behind master: -6868909625984868736 bytesslave同步master的数据落后的是负数,难以理解!二、分析1 上面的日志对应DefaultMessa...

2019-12-11 11:51:11 3604 3

原创 broker无响应时客户端发送消息至少重试一次

一、背景当broker处于半死不活的状态时(gc,os内存不足等等原因),此时表现无法及时响应客户端的请求。针对客户端同步发送消息,默认是带有重试策略的。可是此种情况下,客户端可能并没有重试的机会,详见下面的分析。二、分析参考核心消息发送代码,简化如下:channel.writeAndFlush(request).addListener(new ChannelFutureListener...

2019-12-11 11:48:30 524

原创 NameServer更新bug

一、背景业务方反馈,日志中发现大量如下错误:[2019-09-25T18:29:19,853][WARN ][RocketmqClient ] get Topic [search-core_model_v2-topic] RouteInfoFromNameServer is not exist value[2019-09-25T18:29:19,853][WARN ][R...

2019-12-11 11:46:07 3614

原创 broker负载过高

一、现象集群中两台broker机器分别出现load飙至60%的情况,导致系统无法登陆,引起mqcloud发送失败预警。二、处理首先登陆问题机器,发现无法链接,但是能ping同,证明机器基本处于hang住的状态。在mqcloud后台进行停写,由于ns和broker部署在一块,虽然显示停写成功,但是问题机器上的ns状态应该没有置为只读。偶尔能登录上时,进行截图如下:上面截图显...

2019-12-11 11:23:48 639

原创 广播消费模式的消费者OFFSET_MOVED_EVENT预警问题调查

一、现象mqcloud持续发送topic为digg-topic的消费者digg-group发生偏移量错误的预警邮件,详细预警如下:即:digg-group请求从偏移量156798开始消费,但是broker上最小的消息偏移量是172289,也就是说,消费者想请求消费的消息,在broker上已经不存在了。解释:rocketmq会将此种情况当做一个事件消息发送到内置的topic:OFFSET_M...

2019-12-11 11:20:26 1344

原创 RocketMQ新的订阅组CONSUME_FROM_LAST_OFFSET为啥无效?

一、背景之前遇到一个问题,就是一个新的订阅组,指定集群方式消费,使用DefaultMQPushConsumer,第一次启动指定的consumeFromWhere是CONSUME_FROM_LAST_OFFSET,但是却消费了好久之前的消息!!!CONSUME_FROM_LAST_OFFSET官方的解释是一个新的订阅组第一次启动从队列的最后位置开始消费,后续再启动接着上次消费的进度开始消费,但某...

2018-10-31 15:59:27 8787 6

原创 pinpoint collector nginx 配置

worker_processes 16;error_log logs/error.log;pid logs/nginx.pid;events { worker_connections 65535;}stream { log_format main '$remote_addr [$time_local] ' '$prot...

2018-06-06 09:34:21 3835

原创 10.零拷贝原理

为何要懂零拷贝原理?因为rocketmq和存储核心使用的就是零拷贝原理。io读写的方式中断DMA中断方式中断方式的流程图如下:用户进程发起数据读取请求系统调度为该进程分配cpucpu向io控制器(ide,scsi)发送io请求用户进程等待io完成,让出cpu系统调度cpu执行其他任务数据写入至io控制器的缓冲寄存器缓冲寄存器满了向cpu发出中断信号cpu

2016-09-19 14:58:27 8521 3

原创 9.最佳实践

nameserver相关nameserver如何扩容/下线?由于broker,producer,consunmer都涉及到nameserver地址列表,故推荐如下方式配置:broker相关broker如何下线?先将slave kill掉, 防止kill master后consumer从slave消费如果直接kill master,会造成生产者和消费者

2016-09-19 14:39:38 1157 2

原创 8.consumer

消息的消费者,从消息获取方式分为:推拉 - 推包含了拉,所以拉不再单独说明推 com.alibaba.rocketmq.client.consumer.DefaultMQPushConsumer从使用上来看,数据是broker端源源不断的将消息推到消费者从消息的消费方式上,分为:集群消费:所有的消费者平均消费一份消息广播消费:每个消费者各自消费同一份消息 从消费的顺

2016-09-19 14:32:04 2595 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 1154

原创 6.broker

broker主要有以下几大功能接受客户端发送到消息,并存储接受客户端的消费请求,返回消息数据consumergroup消费进度存储、查询topic配置管理一些其他的配置管理、查询:topic创建、删除、修改,broker配置查询、修改,消息查询,broker运行状态,producer、consumer连接,消费进度等待broker额外存储的持久化数据,默认存储路径为$HOME/stor

2016-09-19 14:23:40 1095

原创 5.NameServer

NameServer作为rocketmq中重要的组件其主要有如下功能:接受boker注册与解除注册获取broker集群信息根据topic查询其路由信息查询所有的topic删除topic查询某集群下的所有topic一些键值对设置,比如顺序消息相关设置接受boker注册与解除注册broker注册时会携带如下信息集群的名字地址broker名字broker id: 0为mast

2016-09-19 14:21:09 2555 7

kubernetes权威指南第二版高清扫描

最火热的容器编排开源技术,最新的版本,最高清的扫描

2017-11-13

虚拟机类加载机制

经典的java虚拟机类加载机制 看完后会有醍醐灌顶的感觉

2013-01-30

smarty 本质 教程 非常棒 从根本理解它

非常好的smarty教程 看完后有醍醐灌顶的感觉 哈哈 真的 大家快来抢吧

2009-11-26

最好 html javascript js css 参考手册 chm 培训老师推荐

这是我在培训师老师给的手册 我工作中查询都靠他 非常棒!!

2009-11-20

最好用最小的最方便的PDF阅读器

此阅读器比adobe reader小的多,而且具有其全部功能,方便易用!

2008-11-10

Oracle 10g帮助文档 经典chm版

最好的学习oracle帮助资料,经典,原版,oracle公司自己出版的.

2008-11-10

空空如也

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

TA关注的人

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