温馨提示:本文基于Kafka2.2.1版本。如果觉得源码阅读比较枯燥,本文的中间有Sender线程的工作流程图。上文《源码分析Kafka消息发送流程》已经详细介绍了KafkaProducersend方法的流程,该方法只是将消息追加到KafKaProducer的缓存中,并未真正的向broker发送消息,本文将来探讨Kafka的Sender线程。在KafkaProducer中会启动一个单独的线程,其名称为“kafkaproducernetworkthreadclientID”,其中clientID为生产者的id。1、Sende...
2023-02-27 16:12:06 308浏览 0点赞 0回复 0收藏
1、DegradeSlot概述Sentinel中的熔断实现类为DegradeSlot。DegradeSlot的类定义如下图所示:由此可见,熔断主要实现逻辑定义在DegradeRuleManager的checkDegrade方法中。DegradeRuleManagercheckDegrade代码1:首先从degradeRules熔断规则缓存中获取资源的熔断规则。代码2:遍历熔断规则列表。代码3:调用熔断规则DegradeRule的passCheck,如果该方法返回false,则表示需要熔断,则抛出DegradeException异常。即实现熔断的核心...
2023-02-20 17:12:08 352浏览 0点赞 0回复 0收藏
在介绍集群限流之前需要首先掌握动态数据源的配置方式,本文将根据Sentinel官方提供的代码提出整体架构思路,并最终给出实践指导。温馨提示:本文主要分为动态数据源架构设计理念、从官方示例寻找改造思路、基于SpringBoot改造方案三个部分来详细剖析Sentienl动态数据源的改造方案,循序渐进,不仅解决问题本身,更是反映了作者研究一个问题的思路与方法。1、架构设计理念在Sentinel中主要有如下几个角色:管理后台、限流熔断规...
2023-02-20 17:11:10 349浏览 0点赞 0回复 0收藏
1、集群限流使用场景首先一个服务有三个服务提供者,但这三台集群的硬件配置不一样,如图所示:为了充分利用硬件的资源,诸如Dubbo都提供了基于权重的负载均衡机制,例如可以将8C16G的机器设置的权重是4C8G的两倍,这样充分利用硬件资源,假如现在需要引入Sentinel的限流机制,例如为一个Dubbo服务设置限流规则,这样由于三台集群分担的流量不均匀,会导致无法重复利用高配机器的资源。假设经过压测,机器配置为C48G最高能承受...
2023-02-20 17:10:30 389浏览 0点赞 0回复 0收藏
本文是源码分析Sentinel系列的第十三篇,已经非常详细的介绍了Sentinel的架构体系、滑动窗口、调用链上下文、限流、熔断的实现原理,相信各位读者朋友们对Sentinel有一个较为体系化的认知了,这个时候是该开始如何在生产环境进行运用了。本文将以Dubbo服务调用为案例剖析场景,尝试对官方提供的Dubbo适配器做一个研究学习并对此做出自己的评价,抛出我的观点,期待与大家共同探讨,交流。一个DubboRPC的简易调用过程如下图所示...
2023-02-20 17:08:10 2100浏览 0点赞 0回复 0收藏
1、问题现象首先接到项目反馈使用RocketMQ会出现如下错误:错误信息关键点:MQBrokerException:CODE:2DESC:[TIMEOUTCLEANQUEUE]brokerbusy,startflowcontrolforawhile,periodinqueue:205ms,sizeofqueue:880。由于项目组并没有对消息发送失败做任何补偿,导致丢失消息发送失败,故需要对这个问题进行深层次的探讨,并加以解决。2、问题分析首先我们根据关键字:TIMEOUTCLEANQUEUE去RocketMQ中查询,去探究在什么时候会抛出如...
2023-02-20 17:07:28 1534浏览 0点赞 0回复 0收藏
本文主要分如下几个部分展开:Linux服务器安装RocketMQ、RocketMQConsoleIDEA中搭建可调试环境1、Linux安装RocketMQ、RocketMQConsole1.1安装RocketMQStep1:从如下地址下载RocketMQ安装包cdoptapplicationwgethttps:mirrors.tuna.tsinghua.edu.cnapacherocketmq4.7.1rocketmqall4.7.1binrelease.zipStep2:解压安装包unziprocketmqall4.7.1binrelease.ziplsl解压后的文件如下图所示:其中conf文件夹存放的是RocketMQ的配置文件...
2023-02-20 17:06:53 275浏览 0点赞 0回复 0收藏
在正式进入RocketMQ的学习之前,我觉得有必要梳理一下RocketMQ核心概念,为大家学习RocketMQ打下牢固的基础。1、RocketMQ部署架构在RocketMQ主要的组件如下:NameserverNameserver集群,topic的路由注册中心,为客户端根据Topic提供路由服务,从而引导客户端向Broker发送消息。Nameserver之间的节点不通信。路由信息在Nameserver集群中数据一致性采取的最终一致性。Broker消息存储服务器,分为两种角色:Master与Slave,上图中...
2023-02-20 17:02:00 1641浏览 0点赞 0回复 0收藏
1、场景描述例如订单库进行了分库分表,其示例如下图所示:现在的需求是希望创建一个任务就将数据同步到MQ集群,而不是为每一个数据库实例单独创建一个任务,将其数据导入到MQ集群,因为同步任务除了库不同之外,表的结构、数据映射规则都是一致的。2、flinkx的解决方案详解2.1finkStreamAPI开发基本流程使用FlinkStreamAPI编程的通用步骤如下图所示:温馨提示:有关StreamAPI的详细内容将在后续的文章中展开,本文主要是关注In...
2023-02-20 17:00:23 1772浏览 0点赞 0回复 0收藏
1、通道概述我们从如下几个方面来简单了解一下Channel。通道的当前状态,open(端口打开)、connect(连接)。通道的配置,包含通道的配置属性与网络通信选项(ChannelOption)。IO通道方法诸如read、write、connect、bind与管道(ChannelPipeline)。所有IO操作在Netty中都是异步的,调用IO方法例如write方法后,并不是等IO操作实际完成后再返回,而是会立即返回一个凭证,IO操作完成后会将结果写入凭证中,典型的Future设计模式。Chan...
2023-02-20 16:59:05 1084浏览 0点赞 0回复 0收藏
在双十一过程中投入同样的硬件资源,Kafka搭建的日志集群单个Topic可以达到几百万的TPS,而使用RocketMQ组件的核心业务集群,集群TPS只能达到几十万TPS,这样的现象激发了我对两者性能方面的思考。温馨提示:TPS只是众多性能指标中的一个,我们在做技术选型方面要从多方面考虑,本文并不打算就消息中间件选型方面投入太多笔墨,重点想尝试剖析两者在性能方面的设计思想。1、文件布局1.1Kafka文件布局Kafka文件在宏观上的布局如...
2023-02-20 16:57:09 268浏览 0点赞 0回复 0收藏
零拷贝是中间件相关面试中必考题,本文就和大家一起来总结一下NIO拷贝的原理,并结合Netty代码,从代码实现层面近距离观摩如何使用java实现零拷贝。1、零拷贝实现原理“零拷贝”其实包括两个层面的含义:拷贝一份相同的数据从一个地方移动到另外一个地方的过程,叫拷贝。零希望在IO读写过程中,CPU控制的数据拷贝到次数为0。在IO编程领域,当然是拷贝的次数越少越好,逐步优化,将其拷贝次数将为0,最大化的提高性能。那接下来...
2023-02-15 15:17:15 188浏览 0点赞 0回复 0收藏
上文已经详细介绍了disruptor,也体会了并发编程的奥妙,接下来将理论结合实战,本文和大家分享一下disruptor的使用,加深对disruptor工具包对理解。1、disruptor常用类一览disruptor的常用类体系如下图所示:其职责说明如下:RingBuffer环形队列,disruptor中的核心存储类Sequencer序号实现器,维护发送者发送的序号生成逻辑、消费方获取可消费的序号,是无锁化访问的核心实现类,共有两个实现类,MultiProducerSequencer为多...
2023-02-15 15:13:42 289浏览 0点赞 0回复 0收藏
RocketMQ作为一款基于磁盘存储的中间件,具有无限积压能力,并提供高吞吐、低延迟的服务能力,其最核心的部分必然是它优雅的存储设计。温馨提示:本文节选自新上市《RocketMQ技术内幕》第二版本,一个最大的改变就是在进入源码分析之前,首先通过图文的方式,提炼出RocketMQ的核心工作机制,降低源码阅读的难度,引发思考。1、存储概述RocketMQ存储的文件主要包括Commitlog文件、ConsumeQueue文件、Index文件。RocketMQ将所有主...
2023-02-15 15:11:36 191浏览 0点赞 0回复 0收藏
Disruptor是业界非常出名的单机版高性能队列,官方宣传能达到百万级吞吐,那disruptor是如何做到的呢?其核心秘诀如下:破除伪共享对象池无锁化设计批处理上面这些观点,网上已经提了N遍,没关系,本文将结合代码、图解的方式,与大家一起探究实现原理,希望能给读者朋友们不一样的感悟。提到Disruptor,必然会提到RingBuffer,disruptor环形队列,是整个Disruptor是基座,本文将尝试以RingBuffer为突破口,揭晓disruptor的核心...
2023-02-15 15:09:34 242浏览 0点赞 0回复 0收藏
一个粉丝朋友在咨询这个问题,我觉得这问题一句话两句话也说不完,答应周末赶一篇文章来重点分析一下。之所以需要详细阐述,这里不仅仅涉及具体的工作机制,更是能体现背后的设计理念,请容我慢慢道来。1、RocketMQ路由注册机制与缺陷RocketMQ的路由注册机制如下:Broker每30s向NameServer发送心跳包,心跳包中包含主题的路由信息(主题的读写队列数、操作权限等),NameServer会通过HashMap更新Topic的路由信息,并记录最后一...
2023-02-15 15:07:24 218浏览 0点赞 0回复 0收藏
作为一个Kafka初学者,需要快速成长,承担维护公司Kafka的重任,对Kafka的学习,我按照三步走策略:阅读Kafka相关书籍从运维实战的角度学习Kafka阅读源码,体系化,精细化掌握其实现原理本文属于学习的第二阶段:[从运维实战的角度学习Kafka],本文重点介绍kafkaconsumergroups运维命令的使用,从运维、使用驱动对消费组的了解。1、Kafka消费组运维实战选项类型详细说明delete命令删除消费组,消费组删除后,其对应的消费位点也...
2023-02-15 15:03:46 194浏览 0点赞 0回复 0收藏
RocketMQ是一款非常优秀的主流中间件,本文是RocketMQ系列的第52篇文章,重点阐述笔者在公司升级RocketMQ集群并开启ACL的真实经历,并且遇到的一些问题及其解决方案,实战性非常强。1、ACL机制的重要性某一天突然接到安全团队的通知,公司内网部署的RocketMQ集群安全性非常低,需要立马整改。接到安全团队的通知,马上开启了复盘,公司内部的RocketMQ集群还是基于RocketMQ4.1搭建的,存在重大安全隐患,因为生产环境的任意一台...
2023-02-15 14:47:58 274浏览 0点赞 0回复 0收藏
作为一个Kafka初学者,需要快速成长,承担维护公司Kafka的重任,对Kafka的学习,我按照三步走策略:阅读Kafka相关书籍从运维实战的角度学习Kafka阅读源码,体系化,精细化掌握其实现原理本文属于学习的第二阶段:[从运维实战的角度学习Kafka],重点学习Kafka的主题,通过运维命令创建、更新主题,从Topic的可运维属性,了解Topic在Kafka内部的运作机制。1、Kafkatopic运维命令的基本使用Kafka提供了kafkatopics脚步用来创建、修...
2023-02-15 14:47:04 177浏览 0点赞 0回复 0收藏
在内网环境中,超时问题,网络表示这个锅我不背。笔者对于超时的理解,随着在工作中不断实践,其理解也越来越深刻,RocketMQ在生产环境遇到的超时问题,已经困扰了我将近半年,现在终于取得了比较好的成果,和大家来做一个分享。本次技术分享,由于涉及到网络等诸多笔者不太熟悉的领域,如果存在错误,请大家及时纠正,实现共同成长与进步。1、网络超时现象时不时总是接到项目组反馈说生产环境MQ发送超时,客户端相关的日志截图...
2023-02-15 14:45:59 217浏览 0点赞 0回复 0收藏