- 博客(421)
- 收藏
- 关注
原创 kafka源码阅读-ReplicaStateMachine(副本状态机)解析
Kafka源码包含多个模块,每个模块负责不同的功能。服务端源码:实现Kafka Broker的核心功能,包括日志存储、控制器、协调器、元数据管理及状态机管理、延迟机制、消费者组管理、高并发网络架构模型实现等。Java客户端源码:实现了Producer和Consumer与Broker的交互机制,以及通用组件支撑代码。Connect源码:用来构建异构数据双向流式同步服务。Stream源码:用来实现实时流处理相关功能。Raft源码:实现了Raft一致性协议。Admin模块。
2024-07-26 00:10:06 1220
原创 kafka源码阅读-ControllerChannelManager解析(Controller如何向Broker发送请求)
Kafka源码包含多个模块,每个模块负责不同的功能。服务端源码:实现Kafka Broker的核心功能,包括日志存储、控制器、协调器、元数据管理及状态机管理、延迟机制、消费者组管理、高并发网络架构模型实现等。Java客户端源码:实现了Producer和Consumer与Broker的交互机制,以及通用组件支撑代码。Connect源码:用来构建异构数据双向流式同步服务。Stream源码:用来实现实时流处理相关功能。Raft源码:实现了Raft一致性协议。Admin模块。
2024-07-24 22:54:48 925
原创 kafka源码阅读-ReplicaManager解析
Kafka源码包含多个模块,每个模块负责不同的功能。服务端源码:实现Kafka Broker的核心功能,包括日志存储、控制器、协调器、元数据管理及状态机管理、延迟机制、消费者组管理、高并发网络架构模型实现等。Java客户端源码:实现了Producer和Consumer与Broker的交互机制,以及通用组件支撑代码。Connect源码:用来构建异构数据双向流式同步服务。Stream源码:用来实现实时流处理相关功能。Raft源码:实现了Raft一致性协议。Admin模块。
2024-07-21 22:13:47 1098
原创 kafka源码阅读-Broker如何处理consumer消费、follower副本数据同步请求
Kafka源码包含多个模块,每个模块负责不同的功能。服务端源码:实现Kafka Broker的核心功能,包括日志存储、控制器、协调器、元数据管理及状态机管理、延迟机制、消费者组管理、高并发网络架构模型实现等。Java客户端源码:实现了Producer和Consumer与Broker的交互机制,以及通用组件支撑代码。Connect源码:用来构建异构数据双向流式同步服务。Stream源码:用来实现实时流处理相关功能。Raft源码:实现了Raft一致性协议。Admin模块。
2024-07-21 15:48:25 976
原创 kafka源码阅读-Broker如何处理生产者的消息写入请求
Kafka源码包含多个模块,每个模块负责不同的功能。服务端源码:实现Kafka Broker的核心功能,包括日志存储、控制器、协调器、元数据管理及状态机管理、延迟机制、消费者组管理、高并发网络架构模型实现等。Java客户端源码:实现了Producer和Consumer与Broker的交互机制,以及通用组件支撑代码。Connect源码:用来构建异构数据双向流式同步服务。Stream源码:用来实现实时流处理相关功能。Raft源码:实现了Raft一致性协议。Admin模块。
2024-07-20 22:40:29 1201
原创 kafka源码阅读-Controller解析
Kafka源码包含多个模块,每个模块负责不同的功能。服务端源码:实现Kafka Broker的核心功能,包括日志存储、控制器、协调器、元数据管理及状态机管理、延迟机制、消费者组管理、高并发网络架构模型实现等。Java客户端源码:实现了Producer和Consumer与Broker的交互机制,以及通用组件支撑代码。Connect源码:用来构建异构数据双向流式同步服务。Stream源码:用来实现实时流处理相关功能。Raft源码:实现了Raft一致性协议。Admin模块。
2024-07-20 18:08:51 886
原创 kafka源码阅读-日志管理器
Kafka源码包含多个模块,每个模块负责不同的功能。服务端源码:实现Kafka Broker的核心功能,包括日志存储、控制器、协调器、元数据管理及状态机管理、延迟机制、消费者组管理、高并发网络架构模型实现等。Java客户端源码:实现了Producer和Consumer与Broker的交互机制,以及通用组件支撑代码。Connect源码:用来构建异构数据双向流式同步服务。Stream源码:用来实现实时流处理相关功能。Raft源码:实现了Raft一致性协议。Admin模块。
2024-07-15 00:25:34 835
原创 kafka源码阅读-Topic创建流程
Kafka源码包含多个模块,每个模块负责不同的功能。服务端源码:实现Kafka Broker的核心功能,包括日志存储、控制器、协调器、元数据管理及状态机管理、延迟机制、消费者组管理、高并发网络架构模型实现等。Java客户端源码:实现了Producer和Consumer与Broker的交互机制,以及通用组件支撑代码。Connect源码:用来构建异构数据双向流式同步服务。Stream源码:用来实现实时流处理相关功能。Raft源码:实现了Raft一致性协议。Admin模块。
2024-07-14 11:59:45 660
原创 kafka源码阅读-Broker启动流程
Kafka源码包含多个模块,每个模块负责不同的功能。服务端源码:实现Kafka Broker的核心功能,包括日志存储、控制器、协调器、元数据管理及状态机管理、延迟机制、消费者组管理、高并发网络架构模型实现等。Java客户端源码:实现了Producer和Consumer与Broker的交互机制,以及通用组件支撑代码。Connect源码:用来构建异构数据双向流式同步服务。Stream源码:用来实现实时流处理相关功能。Raft源码:实现了Raft一致性协议。Admin模块。
2024-07-13 15:14:03 655 1
转载 ASM 简介
前言很早之前就写过面向切面的编程思想,主要学习了AOP的思想(参考:AOP简介)以及使用 AspectJ 实现简单的切面编程(参考:AspectJ之切点语法)。其他常见的AOP编程框架还有 Cglib,Hibernate 和 Spring 等等,而这些目前流行的AOP框架绝大多数底层实现都是直接或间接地通过 ASM 来实现字节码操作。因此,如果你想实现一些简单的切面编程,直接采用上面提及的AOP框架是绝对可以实现的,但是这些框架相对于 ASM 来说重了许多,在你进行代码切入的时候,可能会为你引入许多其
2020-10-30 09:59:00 2113
转载 Docker 不香吗,为啥还要 K8s?
Docker 虽好用,但面对强大的集群,成千上万的容器,突然感觉不香了。这时候就需要我们的主角 Kubernetes 上场了,先来了解一下 K8s 的基本概念,后面再介绍实践,由浅入深步步为营。关于 K8s 的基本概念我们将会围绕如下七点展开:Docker 的管理痛点什么是 K8s?云架构 & 云原生K8s 架构原理K8s 核心组件K8s 的服务注册与发现关键问题Docker 的管理痛点如果想要将 Docker 应用于庞大的业务实现,是存在困难的编排、管理和调度问题。于是,我
2020-09-12 12:01:16 1676 2
转载 SpringBoot---WebMvcConfigurer详解
简介WebMvcConfigurer接口2.1 addInterceptors:拦截器2.2 addViewControllers:页面跳转2.3 addResourceHandlers:静态资源2.4 configureDefaultServletHandling:默认静态资源处理器2.5 configureViewResolvers:视图解析器2.6 configureContentNegotiation:配置内容裁决的一些参数2.7 addCorsMappings:跨域2..
2020-08-04 19:08:54 890
转载 基于Kafka+ELK搭建海量日志平台
早在传统的单体应用时代,查看日志大都通过SSH客户端登服务器去看,使用较多的命令就是 less 或者 tail。如果服务部署了好几台,就要分别登录到这几台机器上看,等到了分布式和微服务架构流行时代,一个从APP或H5发起的请求除了需要登陆服务器去排查日志,往往还会经过MQ和RPC调用远程到了别的主机继续处理,开发人员定位问题可能还需要根据TraceID或者业务唯一主键去跟踪服务的链路日志,基于传统SSH方式登陆主机查看日志的方式就像图中排查线路的工人一样困难,线上服务器几十上百之多,出了问题难以快速响应,因
2020-08-02 14:26:44 393
转载 Kafka 总结
一、kafka概述:1、消息队列:1)、原理及其有点:客户端消费Queue种的数据有两种方式:1、发布/订阅模式,也就是一对多,数据生产之后,推给所有的订阅者,打个比方:就像是手机上面的QQ消息,你没有打开手机看消息,但是如果有消息就会一直有消息推送过来。2、点对点模式,也就是一对一,这个是主动模式,第一种模式更像是被动模式,这个就是消费者主动拉取生产后的数据。2、消息队列的优点:1)、解耦。2)、冗余。3)、扩展性。4)、灵活性and峰值处理能力。5)、可恢复性。6)、顺序保证。(ps:kafk
2020-07-17 09:31:26 235
转载 mybatis之foreach用法
在做mybatis的mapper.xml文件的时候,我们时常用到这样的情况:动态生成sql语句的查询条件,这个时候我们就可以用mybatis的foreach了foreach元素的属性主要有item,index,collection,open,separator,close。item:集合中元素迭代时的别名,该参数为必选。index:在list和数组中,index是元素的序号,在map中,index是元素的key,该参数可选open:foreach代码的开始符号,一般是(和close=")“合用。常用
2020-07-14 15:29:45 448 1
转载 JAVA基础知识之NIO.2——Path,Paths,Files
NIO.2JDK7对NIO进行了重大改进,主要包含以下两方面新增Path接口,Paths工具类,Files工具类。 这些接口和工具类对NIO中的功能进行了高度封装,大大简化了文件系统的IO编程。基于异步Channel的IO在NIO基础上改进后的IO被称为NIO.2 , 上面第一个改进包含在java.nio下新增的包java.nio.file包。 第二个改进包含在原有的java.nio.channels下,新增了多个Aysnchronous开头的channel接口和类。本文暂时只讨论第一个改进,基于
2020-07-13 20:50:40 474
转载 Redis5.0 的19 个新特性!
Redis 5.0 GA 正式版发布了!下载地址:download.redis.io/releases/redis-5.0.0.tar.gz源码下载:github.com/antirez/redis/releases/tag/5.0.0先看一下 Redis 5 带来的更新内容:新的流数据类型(Stream data type) https://redis.io/topics/streams-intro2.新的 Redis 模块 API:定时器、集群和字典 API(Timers, Cluste
2020-07-12 16:28:43 678
转载 shell中#*,##*,#*,##*,% *,%% *的含义及用法 替换字符
介绍下Shell中的KaTeX parse error: Expected 'EOF', got '#' at position 4: {}、#̲#和%%使用范例,本文给出了不…{ }分别替换得到不同的值:${file#/}:删掉第一个 / 及其左边的字符串:dir1/dir2/dir3/my.file.txt${file##/}:删掉最后一个 / 及其左边的字符串:my.file.txt${file#.}:删掉第一个 . 及其左边的字符串:file.txt${file##.}:删掉最后一个 .
2020-07-02 11:24:58 2527
转载 CentOS7下Systemctl详解
一、Systemd简介Systemd是由红帽公司的一名叫做Lennart Poettering的员工开发,systemd是Linux系统中最新的初始化系统(init),它主要的设计目的是克服Sys V 固有的缺点,提高系统的启动速度,systemd和upstart是竞争对手,ubantu上使用的是upstart的启动方式,centos7上使用systemd替换了Sys V,Systemd目录是要取代Unix时代依赖一直在使用的init系统,兼容SysV和LSB的启动脚本,而且能够在进程启动中更有效地引导加
2020-06-29 19:35:04 1965
转载 SSH的免密登录详细步骤
需求为了保证一台Linux主机的安全,所以我们每个主机登录的时候一般我们都设置账号密码登录。但是很多时候为了操作方便,我们都通过设置SSH免密码登录。在这里我对本地机器Cloud10和目标机器Cloud11、Cloud12进行免密登录大致的三步1.本地机器生成公私钥2.上传公钥到目标机器3.测试免密登录具体操作1.准备工作使用root权限分别修改每台机器的hosts,添加每台机器所对应的IP和主机名(我这里分布式集群是3台机器组成的,所以配置3台,习惯将自己的ip和主机名放在第一行)su
2020-06-29 16:28:31 8957
转载 TCP_NODELAY详解
在网络拥塞控制领域,我们知道有一个非常有名的算法叫做Nagle算法(Nagle algorithm),这是使用它的发明人John Nagle的名字来命名的,John Nagle在1984年首次用这个算法来尝试解决福特汽车公司的网络拥塞问题(RFC 896),该问题的具体描述是:如果我们的应用程序一次产生1个字节的数据,而这个1个字节数据又以网络数据包的形式发送到远端服务器,那么就很容易导致网络由于太多的数据包而过载。比如,当用户使用Telnet连接到远程服务器时,每一次击键操作就会产生1个字节数据,进而发送
2020-06-25 14:04:42 10650
转载 gcc 编译工具(上)--- 编译过程和原理浅析
gcc 编译工具(上)— 编译过程和原理浅析什么是gccgcc(GNU C Compiler)编译器的作者是Richard Stallman,也是GNU项目的奠基者。gcc是GNU Compiler Collection的缩写。最初是作为C语言的编译器,现在已经支持多种语言了,如C、C++、Java、Pascal、Ada、COBOL语言等。gcc支持多种硬件平台,甚至对Don Knuth设计的MMIX这类不常见的计算机都提供了完善的支持。gcc的主要特征gcc是一个可移植的编译器,支持多种硬件
2020-06-20 22:50:22 731
转载 https://www.cnblogs.com/yangxd1994/p/12083014.html
https://www.cnblogs.com/yangxd1994/p/12083014.html
2020-06-19 19:21:16 2816
转载 Java多线程任务超时结束的5种实现方法
在用Java编写并发程序时,往往会碰到某个线程因计算量大或因阻塞而一直处于无响应的情况,我们可能会等的不耐烦(也可能是不想让它占用太多资源)想及时终止掉它,那就需要用到任务超时结束的技巧了。在刚接触到多线程时,我本以为API会提供这样一个多线程类:Thread(Runnable r, long timeout) ,第二个参数用来设置超时时间,可事实并非如此。因为这样的类不具有通用性,面向对象设计语言的目标是达到更高级的抽象,所以系统只提供了更广泛的定时类,及其他一些类方法。这就需要我们借助这些工具来达到任务
2020-06-19 11:06:30 2453
转载 epoll使用详解(精髓)
epoll - I/O event notification facility在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。并且,在linux/posix_types.h头文件有这样的声明:#define __FD_SETSIZE 1024
2020-06-17 22:03:40 781
转载 CentOS 7 挂载本地光盘作为镜像源
上传iso文件到/usr/local/src一定要确保这个ISO文件上传完毕后再进行下面的操作。创建挂载目录mkdir /media/CentOS7挂载iso文件mount -t iso9660 -o loop /usr/local/src/CentOS-7-x86_64-Everything-1503-01.iso /media/CentOS74. 设置开机自动挂载光盘镜像执行 vi /etc/fstab(fstab 输入错误会使主机无法正常启动而进入emerge.
2020-06-16 09:11:53 2123
转载 一台java服务器可以跑多少个线程?
一台java服务器能跑多少个线程?这个问题来自一次线上报警如下图,超过了我们的配置阈值。京东自研UMP监控分析打出jstack文件,通过IBM Thread and Monitor Dump Analyzer for Java工具查看如下:IBM Thread and Monitor Dump Analyzer for Java共计1661个线程,和监控数据得出的吻合。但这个数量应该是大了,我们都知道线程多了,就会有线程切换,带来性能开销。当时就想到一台java服务器到底可以跑多少个线程呢?跟什么
2020-06-15 19:14:38 1202
转载 使用Spring @DependsOn控制bean加载顺序
使用Spring @DependsOn控制bean加载顺序spring容器载入bean顺序是不确定的,spring框架没有约定特定顺序逻辑规范。但spring保证如果A依赖B(如beanA中有@Autowired B的变量),那么B将先于A被加载。但如果beanA不直接依赖B,我们如何让B仍先加载呢?控制bean初始化顺序可能有些场景中,bean A 间接依赖 bean B。如Bean B应该需要更新一些全局缓存,可能通过单例模式实现且没有在spring容器注册,bean A需要使用该缓存;因此,如果
2020-06-12 18:07:49 240
转载 XXL-JOB快速入门
概述XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。官方地址中文版:http://www.xuxueli.com/xxl-job目前已有多家公司接入xxl-job,包括比较知名的大众点评,京东,优信二手车,北京尚德,360金融 (360),联想集团 (联想),易信 (网易)等等…Quartz作为开源作业调度中的佼佼者,是作业调度的首选。集群环境中Quartz采用API的方式对任务进行管理,Quartz
2020-06-10 22:08:28 1589
转载 java jvm 参数 -Xms -Xmx -Xmn -Xss 调优
堆大小设置JVM 中最大堆大小有三方面限制: 1.相关操作系统的数据模型(32-bt还是64-bit)限制; 2.系统的可用虚拟内存限制; 3.系统的可用物理内存限制. 在32位系统下,一般限制在1.5G~2G;64为操作系统对内存无特定限制.机器配置:128G内存 32核CPU典型设置:java -Xmx72g -Xms72 -Xmn4g -Xss256m-Xmx72g:设置JVM最大可用内存为72g.-Xms72g:设置JVM促使内存为72g.此值可以设置与-Xmx相同,以避免每次垃圾回
2020-06-09 16:34:51 1045
转载 深入springboot原理——一步步分析springboot启动机制(starter机制)
文章主目录前言起步依赖自动配置总结回到顶部前言使用过springboot的同学应该已经知道,springboot通过默认配置了很多框架的使用方式帮我们大大简化了项目初始搭建以及开发过程。本文的目的就是一步步分析springboot的启动过程,分析springboot是如何帮我们简化这个过程的。springboot帮我们做了什么通常搭建一个基于spring的web应用,我们需要做以下工作:1、pom文件中引入相关jar包,包括spring、springmvc、redis、mybaits、l
2020-06-08 22:33:26 281
转载 spring boot 工作原理
一,springspring iocioc(inversion of control,控制反转)有两种实现方式,一种是di(dependency injection),另一种是dl(dependency lookup,依赖查找),前者是当前软件实体被动接受其依赖的其他组件被ioc容器注入,而后者则是当前软件实体主动去某个服务注册地查找其依赖的那么服务。任何一个使用spring框架构建的独立的Java应用,通常会存在一些类似于context.getBean(…)的代码,实际上,这行代码做的就是dl的工作
2020-06-08 22:32:05 579
转载 centos7 开启mysql5.7远程连接授权并连接
centos7 开启mysql5.7远程连接授权并连接Aledsan 2020-04-13 11:48:46 302 收藏展开在centos7安装了mysql数据库,却发现只能本地连接,那么如何来实现远程连接呢, 下面就讲述如何开启mysql5.7远程连接授权并远程连接。一、远程连接授权如果要用第三方工具,如Navicat启用远程访问,是要授权的,因为mysql默认禁止远程访问这里我们有两种方法,一种是下面这种sql语句授权GRANT ALL PRIVILEGES ON . TO ‘roo
2020-06-08 19:11:59 784
转载 Redis的epoll模型
之前相关文章推荐:Redis高性能与epoll本文,我们从源代码的角度,简单理解Redis是如何使用epoll以及epoll的实现原理。浅入浅出~ 找我交流通过本文了解如下三件事儿,就算是达到了本文目的:1、epoll是Linux提供的系统实现,核心方法只有三个2、epoll效率高,是因为基于红黑树、双向链表、事件回调机制3、redis的IO多路复用,Linux上用epoll进行了实现epoll是Linux内核提供的一种多路复用器,照例问问Linux的男人:EPOLL(7)
2020-06-04 22:41:48 3049
转载 Prometheus vs Zabbix
公司要上监控,Prometheus 是最热门的监控解决方案,作为喜新厌旧的程序员,我当然是选择跟风了,但上级更倾向于 Zabbix,那没办法,只能好好对比一番,给出几个靠谱的理由了。Monitoring system但稍稍深入一点,我就体会到,我之前其实并没有真的理解口口相传的 Prometheus 的优点,这次对比虽然是始于无奈,但还是蛮有意义的,正好总结一下自己粗浅的体会。对比先对两者的各自特点进行一下对比:Zabbix Prometheus后端用 C 开发,界面用 PHP 开发,定制化
2020-06-04 22:34:33 396
转载 Linux vmstat命令详解
vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、CPU活动进行监控。是对系统的整体情况进行统计,不足之处是无法对某个进程进行深入分析。物理内存和虚拟内存区别我们知道,直接从物理内存读写数据要比从硬盘读写数据要快的多,因此,我们希望所有数据的读取和写入都在内存完成,而内存是有限的,这样就引出了物理内存与虚拟内存的概念。物理内存就是系统硬件提供的内存大小,是真正的内存,相对于物理内存,在linux下还有一个虚拟内存的概念,虚拟内存就是
2020-06-01 14:24:32 183
转载 基于Spark的电影推荐系统,包含爬虫项目、web网站、后台管理系统以及spark推荐系统
基于Spark的电影推荐系统本次项目是基于大数据过滤引擎的电影推荐系统–“懂你”电影网站,包含了爬虫、电影网站(前端和后端)、后台管理系统以及推荐系统(Spark)。...
2020-04-08 10:10:54 1818
转载 JVM源码分析系列
JVM源码分析系列占小狼32019.01.27 10:35:22字数 363阅读 4,258记得关注一下公众号JVM G1算法系列G1垃圾收集器介绍G1垃圾收集器之RSetG1垃圾收集器之SATBG1垃圾收集器之对象分配过程ZGC系列ZGC,一个超乎想象的垃圾收集器ZGC什么时候进行垃圾回收JVM源码分析系列深入分析Object.finalize方法的实现原理JV...
2020-04-02 15:27:45 568
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人