自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(62)
  • 资源 (24)
  • 收藏
  • 关注

原创 Akka入门

Akka是一个异步非阻塞高并发处理框架,它是一系列框架,包括akka-actor, akka-remote, akka-cluster, akka-stream等,分别具有高并发处理模型——actor模型,远程通信,集群管理,流处理等功能。

2023-04-06 19:16:36 1458 1

原创 分布式任务调度Schedulerx2.0 Map模型作业执行流程

Schedulerx2.0提供了多种分布式编程模型,下面以一个Map模型的作业来说明它的执行流程。

2022-09-02 09:59:28 813

原创 分布式任务调度Schedulerx2.0工作原理

Schedulerx2.0是阿里巴巴开发的一个基于akka的分布式任务调度框架,提供分布式执行、多种任务类型、统一日志等功能,用户只要依赖schedulerx-worker这个jar包,通过schedulerx2.0提供的编程模型,简单几行代码就能实现一套高可靠可运维的分布式执行引擎。本文主要讲解schedulerx-worker的工作原理。...

2022-09-01 10:46:10 2035

原创 RocketMQ消息消费(Consumer)源码解析

RocketMQ中消息消费以消费组的模式开展,一个消费组内可以包含多个消费者,每一个消费者组可订阅多个主题,消费组内消费者之间有集群模式和广播模式两种消费模式。集群模式,主题下的同一条消息只允许被其中一个消费者消费。广播模式,主题下的同一条消息,将被集群内的所有消费者消费一次。消息服务器与消费者之间的消息传递也有两种模式:推模式、拉模式。所谓的拉模式即PullConsumer,是消费端主动拉起拉消息请求,而推模式即PushConsumer,是消息达到消息服务器后,推送给消息消费者。......

2022-08-23 22:13:00 1976

原创 RocketMQ中Broker接收消息流程代码解析

在步骤3中,会对topic进行检查,如果topic不存在,且设置成自动创建topic,就会在Broker上自动创建topic。第3步,最终回调的Callback类将数据写入buffer中,消息的序列化也是在callback里面完成的。putMessage会做一下检查,然后调用CommitLog的putMessage方法来写入消息。Broker最后调用MessageStore来存储数据。做接收和处理producer发送过来的消息。在RocketMQ中,Broker通过。...

2022-08-07 00:15:41 646

原创 RocketMQ创建topic流程解析

RocketMQ使用topic来分隔各个业务逻辑的消息,发送消息前需要创建topic。topic的创建有两种方式,一种是broker支持在收发消息时自动创建,比如producer发过来的消息带了一个不存在的topic,如果broker设置成可自动创建的话,会自动尝试创建topic。另外一种就是通过管理接口创建,这种方式生产环境用的更多一些,因为可以由管理员来统一管理topic。...

2022-08-06 21:29:53 9870

原创 RocketMQ消息发送源码解析

在DefaultMQProducer的构造函数中,主要是创建了类DefaultMQProducerImpl的实例,通过类DefaultMQProducerImpl的实例来实现各种逻辑。Producer作为生产者是RocketMQ的重要组成部分,下面我们通过一个消息发送的例子来说明Producer的工作原理。1、首先创建一个DefaultMQProducer实例,然后设置NameSrv的地址,再启动实例。2、当需要发送消息时,创建消息实例,然后发送消息给Broker。2.选择要发送到的消息队列。...

2022-07-31 23:22:30 591

原创 RocketMQ中的消息存储文件解析

RocketMQ中写入的消息会存储再commit文件下,然后再异步的转存到consumeQueue以及indexFile

2022-05-28 16:33:19 866

原创 RocketMQ 消息存储核心流程源码解析

RocketMQ作为一个消息队列需要一个高效的机制来存储消息,store模块就是RocketMQ的消息存储模块,下面介绍一下store中消息存储的核心流程。一、消息存储核心类DefaultMessageStore是消息存储的核心模块和入口,它的定义如下:public class DefaultMessageStore implements MessageStore { /** * 消息过滤器 */ private final MessageFilter

2022-05-22 10:52:22 320

原创 RocketMQ Broker启动流程解析

RocketMQ中Broker模块主要负责消息的存储、投递和查询以及服务高可用保证,它是RocketMQ中最为核心的模块,下面介绍一下它的启动流程。启动入口Broker是通过BrokerStartup的主函数启动的,代码如下:public static void main(String[] args) { start(createBrokerController(args));}先通过函数createBrokerController创建BrokerController对象,然后用st

2022-05-08 16:56:38 921

原创 RocketMQ的底层通信模块remoting 源码解析

remoting是RocketMQ的底层通信模块,RocketMQ底层通讯是使用Netty来实现的。

2022-05-04 00:09:50 1329

原创 RocketMQ的元数据管理模块NameServer启动流程分析

NameServer是RocketMQ的元数据管理模块,它负责整个RocketMQ集群的Broker和元数据管理。下面以NameServer的启动流程来说明NameServer的工作原理。一、启动入口NamesrvStartup 是的NameServer服务的启动类。 其入口是 main0( ) 方法。代码如下:public static NamesrvController main0(String[] args) { try { //创建NameSe

2022-05-01 17:08:07 617

原创 RocketMQ的部署架构与代码模块组成

RocketMQ是阿里巴巴开源的一款高性能、高吞吐量、低延迟、高可用的分布式消息队列,通过对RocketMQ源码的学习可以知道一个出色的消息队列如何设计、如何运行。nameServerNameServer 是专为 RocketMQ 设计的轻量级元数据管理模块,相当与Kafka中的zookeeper,管理集群中的Broker和元数据,整个Rocketmq集群的工作原理如下图所示:可以看到,RocketMQ架构上主要分为四部分, Broker、Producer、Consumer、NameServ

2022-04-24 20:40:44 321

原创 Elastic-job支持基于有向无环图(DAG)的作业依赖技术方案

Elastic-job是当当网架构师基于Zookepper、Quartz开发并开源的一个Java分布式定时任务,解决了Quartz不支持分布式的弊端。Elastic-job除了支持单个作业按照规定的时间触发外,还可以将多个作业通过有向无环图(DAG)的方式生成依赖关系,然后按照DAG中的依赖关系依次调度执行这些作业。下面说一下实现这个功能的技术方案。作业的定义假设在一个Elastic-job集群中,有三个作业A,B,C。它们的依赖关系依次是A-->B-->C。每个作业都有...

2022-04-10 21:48:51 1315

原创 Kafka中消费者Consumer消息读取流程源码解析

Kafka的消费者consumer是通过遍历KafkaStream的迭代器ConsumerIterator来消费消息的,其数据来源是分配给给KafkaStream的阻塞消息队列BlockingQueue,而BlockingQueue中的消息数据来自于针对每个Broker Server的FetchThread线程。FetchThread线程会将Broker Server上的部分partition数据发送给对应的阻塞消息队列BlockingQueue。其具体流程如下:其中类kafka.consumer.

2022-04-05 23:37:20 3248

原创 Kafka中生产者Producer消息发送流程源码解析

Kafka的Java客户端通过封封类kafka.producer.Producer来提供消息发送服务,所以消息发送的逻辑主要是在kafka.producer.Producer中完成。Producer的代码如下:class Producer[K,V](val config: ProducerConfig, private val eventHandler: EventHandler[K,V]) // only for unit testing extends

2022-04-03 15:24:56 3118

原创 KafkaController创建topic流程解析

一、kafka-topic.sh为了便于操作Kafka集群,Kafka源码包中提供了多个shell脚本,其中kafka-topic.sh提供了Topic的创建、修改、列举、描述、删除功能,内部通过TopicCommand来实现。其脚本内容如下://kafka-run-class.sh加载kafka的classpath,执行其中kafka.admin.TopicCommand的main函数exec $(dirname $0)/kafka-run-class.sh kafka.admin.Topic

2022-03-19 01:03:45 2814

原创 KafkaController内部的监听器

作为Kafka的重要模块,KafkaController主要通过监听zookeeper节点的变化来感知集群中元数据的变化,KafkaController内置多个zookeeper监听函数,监听的对象包括:在线的Broker Server列表,Topic列表,Partition对应的AR列表,Partition对应的ISR列表等等

2022-03-06 19:17:52 1968

原创 Kafka中Topic的分区状态管理模块PartitionStateMachine源码解析

Kafka集群中,Topic的分区状态有PartitionStateMachine模块负责,通过在zookeeper上的目录/brokers/topics和/admin/delete_topics注册不同的监听函数,监听Topic的创建和删除事件,从而触发Topic的分区状态转换。

2022-02-27 16:43:14 947

原创 KafkaController的初始化流程源码解析

KafkaController模块的初始化是由ZookeeperLeaderElector决定的,当Broker Server被选为leader时,会触发调用onBecomingLeader回调函数,当

2022-02-23 21:40:55 924

原创 Kafka中集群控制管理模块KafkaController的选举策略

KafkaController是Kafka集群的控制管理模块,负责集群中Topic的创建、分区的重新分配以及分区副本Leader的重新选举等管理集群的功能。虽然每个Broker Server都有一个KafkaController模块,但是有且有一个处于leader状态的KafkaController模块对外提供管理服务。下面介绍一下KafkaController的选举策略。在kafka内部,所有的Broker Server都会启动一个KafkaController模块,但是只会有一个KafkaContr

2022-02-13 12:14:48 1207

原创 KafkaApis处理FetchRequest请求源码解析

KafkaApis模块是Kafka中负责不同业务请求的具体实现逻辑,本文主要讲一下KafkaApis处理FetchRequest请求的流程。当状态为Follower的Replica向状态为Leader的Replica同步数据或者消费者获取数据时,Replica会发送FetchRequest给Leader所在的Broker Server,Broker Server在接收到FetchRequest请求时,会返回相应的数据,同时还会根据情况更新对应的元数据。其详细的过程如下:def handleFetc

2022-02-06 18:50:39 1677

原创 KafkaApis处理ProducerRequest请求源码解析

KafkaApis模块是Kafka中负责不同业务请求的具体实现逻辑,本文主要讲一下KafkaApis处理ProducerRequest请求的流程。

2022-02-01 18:10:21 1930

原创 Kafka的偏移量Offset管理模块OffsetManager源码解析

在Kafka内部有一个名为__consumer_offsets的topic,这个topic主要保存了每个消费组对topic下的partition消费的偏移量,即消费到了哪个offset。为了实现消费组offset管理的功能,当一个消费者获取到一条消息时,需要让消费者使用offset commit请求API来提交offsets。我们让brokers记录offset消息到磁盘上,并且使用消息的复制特征,达到持久性和可用性。所以实际上在broker端的offset提交处理和生产者请求的处理是一样的逻辑。在brok

2022-01-30 16:08:50 2233

原创 Kafka的副本管理模块ReplicaManager处理LeaderAndIsrRequest请求流程

当Broker Server被分配Replica的时候,该Replica有可能成为Leader状态的Replica或者Follower的状态的Replica。

2022-01-30 11:37:29 1326

原创 MQTT协议框架MOP代码结构解析

一、MoP是啥MoP 即MQTT on Pulsar ,是一个在Pulsar基础上实现的MQTT协议,git地址:https://github.com/streamnative/mop通过MoP可以快速的搭建一个MQTT服务器,下面介绍一下MoP的主要的代码结构。二、MQTT消息定义MQTT的消息在MoP中的定义是MqttMesssage,其代码如下:public class MqttMessage { private final MqttFixedHeader mqttFixe

2022-01-23 11:35:49 5497

原创 Kafka的副本管理模块ReplicaManager源码解析

ReplicaManager负责kafka集群中Topic的分区副本数据的同步功能,当集群中发送副本的变化时,如Partition的Replicas发生leader切换的时候, ReplicaManager会接收来自controller的command命令,ReplicaManager会根据command作出不同的操作, 从而完成Replica的管理工作。ReplicaManager接收的command主要有两种, LeaderAndISRCommand和StopReplicaCommand。需要执行的

2022-01-22 23:37:39 1217

原创 kafka的日志模块log源码解析

一、背景作为一个分布式的消息队列,kafka的日志模块主要用来存储、读取消息,它为kafka集群的高可用、高性能提供了基础。下面结合kafka的源码分析一下日志模块的设计思路。二、日志格式kafka的以topic为单位组织消息,为了提高系统的吞吐率,将一个topic分为N个partition。以partition为单位接收、消费消息。一个partition有多个分片,主分片接收生成者发送的消息,同时副分片从主分片出拉取消息,消费者也从主分片出消费消息。其工作原理如下图。图1-kafka消

2022-01-13 22:17:06 1643

原创 kafka的通信模块SocketServer代码解析

SocketServer作为kafka集群中broker的通信模块,主要用来接收socket请求,然后产生为之服务的SocketChannel对象,再通过这个SocketChannel对象来和客户端通信。SocketServer的代码如下:class SocketServer(val brokerId: Int, val host: String, val port: Int, val n

2022-01-08 17:56:25 1110

原创 kafka中broker的启动流程与代码模块组成

Kafka集群是由若干个broker组成的,启动kafka集群就是将集群中的broker启动并正常运行。broker与broker之间、broker与生成者之间、broker与消费者之间都存在各种交互。下面简单介绍一下broker的启动流程。启动broker的脚本:nohup ./bin/kafka-server-start.sh config/server.properties &其中,脚本文件kafka-server-start.sh启动的操作如下:...

2022-01-08 10:37:16 536

原创 Java线上问题排查常用方法

Java程序在运行中会出现各种问题,包括CPU、内存、磁盘等。下面介绍一下常用的问题排查方法。一、CPU问题当出现性能问题时,我们首先会排查是否是CPU方面的问题。包括CPU负载过高、死循环、频繁 gc 以及上下文切换过多。在JAVA程序中,经常使用jstat、jstack命令来排查Java程序导致的CPU问题。我们先用 ps 命令找到对应进程的 pid(如果你有好几个目标进程,可以先用 top 看一下哪个占用比较高)。接着用top -H -p pid来找到 CPU 使用率比较高的一些线程

2021-09-14 21:41:50 608

原创 xxl-job的作业触发机制

XXL-JOB是一个轻量级分布式任务调度平台,采用集中式的触发方式。由注册模块接收用户的作业信息并写入到数据库中,然后服务端启动两个线程scheduleThread、ringThread来触发任务一、scheduleThreadscheduleThread的执行代码如下:scheduleThread = new Thread(new Runnable() { @Override public void run() {

2021-08-30 00:01:55 1236

原创 Skywalking数据存储消费方式

一、背景Skywalking在进行链路追踪时,会不断生成数据,这些数据先缓存在本地,然后异步批量上报。产生数据的一方为生产者,获取数据并上报为消费者。下面简单介绍一下Skywywalking的数据存储于消费的设计。二、Skywalking数据存储、消费方式Skywalking的数据存储及上报的逻辑在类DataCarrier中实现,DataCarrier的定义如下:public class DataCarrier<T> { /** * buffer 大小

2021-08-22 23:47:11 1118

原创 链路追踪工具数据缓存方式

一、背景在链路追踪中,会不断生成数据,这些数据先缓存在本地,然后异步批量上报,服务端接收上报的数据然后做一些处理、整合,再写入到数据库中。由于需要将数据先缓存到本地,所以就涉及到本地数据的缓存方式二、业界处理方案-zipkin与skyingworking1、zipkin使用本地内存作为队列,不断生成的数据写入到队列中,再启动一个线程消费队列中的数据,将数据发送给kafka,另一端从kafka中消费数据并加以处理。由于使用本地内存作为队列缓存数据,所以存在数据丢失风险,当数据过多超过内存.

2021-08-19 21:14:28 165

原创 sentinel中的QPS降级操作-DegradeSlot

sentinel通过在各种slot来实现不同的功能,其中的DegradeSlot就是根据各种规则来进降级操作,下面介绍一下DegradeSlot。DegradeSlot#entrypublic void entry(Context context, ResourceWrapper resourceWrapper, DefaultNode node, int count, boolean prioritized, Object... args) throws Throwable {

2021-07-25 23:18:19 339

原创 sentinel中的QPS流量控制-FlowSlot

sentinel通过在各种slot来实现不同的功能,其中的FlowSlot就是根据各种规则来进行流量限制的单元,下面介绍一些FlowSlot的实现原理。FlowSlot#entrypublic void entry(Context context, ResourceWrapper resourceWrapper, DefaultNode node, int count, boolean prioritized, Object... args) throws Th

2021-07-18 23:47:07 754

原创 一篇文章看懂Elastic-Job的执行原理

elastic-job是一个无中心化的分布式定时调度框架,思路来源于Quartz的基于数据库的高可用方案。但是由于Quartz没有分布式扩容、高可用等能力,所以在系统中引进了Zookeeper,用Zookeeper来实现分布式管理的功能,在高可用方案的基础上增加了弹性扩容和数据分片的思路,以便于更大限度的利用分布式服务器的资源。一、QuartzQuartz说由OpenSymphony提供的强大的开源任务调度框架,用来执行定时任务。比如每天凌晨三点钟需要从数据库导出数据,这时候就需要一个任务调度框架,

2021-07-11 23:09:49 2573 1

原创 sentinel中的NodeSelectorSlot执行流程

在上一篇文章(sentinel调用上下文(Context)数据结构分析)中,我们分析出sentinel通过函数Entry e = new CtEntry(resourceWrapper, chain, context);创建好了context,context的结构如下:当每次调用,SphU.entry("abc")时,都会创建一个新的Entry对象时,都会重新设置context的curEntry,并将context原来的curEntry设置为该新Entry对象的父节点。这样每个资源都是链表中

2021-07-11 00:03:01 248

原创 sentinel调用上下文(Context)数据结构分析

sentinel是一个轻量级高可用流量控制组件,使用sentinel来进行流量控制的简单demo如下:Entry entry = null;try { entry = SphU.entry("abc"); entry = SphU.entry("abc");} catch (BlockException e1) {} finally { if (entry != null) { entry.exit(); }}将字符串“abc”抽象成一个

2021-07-10 21:47:23 592

原创 sentinel基于滑动窗口实现实时指标统计原理

sentinel通过责任链模式,让每个slot来实现一种功能来实现流量控制、熔断降级等功能。其中,最重要的一个Slot非StatisticSlot莫属,它通过统计单位时间的调用数、成功数、失败数等,为流量控制、熔断降级等提供数据支撑,而StatisticSlot的底层是基于滑动窗口实现实时指标统计的,下面介绍一下StatisticSlot的工作过程一、StatisticSlot的入口 sentinel将多个slot串联起来,每个slot在处理完成后,将数据传递给下一个slot,这些slot都是...

2021-07-03 17:38:41 566 1

VC实现音乐播放器

VC实现的音乐播发器,可以实现文件的添加和删除、可以播放音乐。

2014-04-03

邮件收发器

Visual C++实现的邮件收发器,包括邮件的发送和接收。

2014-04-03

P2P网络播放器

VC++实现的网络播放器,可以实现socket通信和MP3文件播放。

2014-04-03

FTP文件管理程序(java版)

FTP文件管理程序,java实现,能进行文件的上传和下载。

2014-03-02

摄像头拍照程序(java实现)

摄像头拍照程序,java实现,可以进行拍照和图片操作。

2014-03-02

网页浏览器(java实现)

java实现的网页浏览器。可以对网页进行浏览和基本操作。

2014-03-02

网络五子棋游戏(java版)

网络五子棋游戏程序,java实现。可以在两台电脑上进行五子棋游戏。

2014-03-02

仿QQ聊天软件(java版)

仿QQ聊天软件,java语言实现,能实现用户的添加和交流。

2014-03-02

php项目(在线考试系统)

网络在线考试系统源代码(Aapche+php+mysql)

2013-04-07

php项目(电子商务平台网)

电子商务平台源代码(php+mysql实现),内容详实

2013-04-07

php开发OA系统

办公自动化系统源代码(php+mysql实现)

2013-04-07

php编写物流配送系统源代码

物流配送系统源代码(php+mysql实现)

2013-04-07

php编写图书馆管理系统

学习图书馆管理系统源代码(php+mysql实现)

2013-04-07

php编写博客管理系统

博客管理系统(Apache+php+mysql实现)

2013-04-07

php编写企业快信系统

企业快信系统(Apache+php+Access+web Service实现)

2013-04-07

Java开发的银行系统

java开发的银行管理系统实例,内容详实。

2013-04-02

Java课程设计案例

Java课程设计中的一些案例,适合初学者

2013-04-02

PHP+Mysql+JS手册

PHP+Mysql+JS手册是开发php、mysql、javascript的技术文档

2013-04-02

WordPress中文完全教程

WordPress中文完全教程主要介绍了如何搭建、运用、开发WordPress

2013-04-02

ThinkPHP3.0 完全开发手册

ThinkPHP3.0 完全开发手册.pdf是开发Thinkphp的技术文档,适合初学者

2013-04-02

html5+css3源代码

基本的html5和css3的源代码实例,适合初学者学习html5和css3

2013-04-02

切水果html5编写

html5编写的切水果游戏源代码,内容详实,是学习游戏编程的好例子。

2013-04-02

捕鱼游戏HTML5编写

html5编写的捕鱼游戏源代码,里面涉及到html5游戏的制作

2013-04-02

python-3.2.3

windows下的python3.2.3。资源不好找了,特发出来让大家也好下载。

2012-12-18

空空如也

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

TA关注的人

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