源码类文章阅读导航【置顶】置顶|前言
为了方便大家阅读,单独用一篇文章罗列出各个技术源码的阅读目录,目前主要分为以下几个方向:
Kafka、JDK、Spring、Spring Boot、Spring Cloud
版本信息
项目源码因版本不同会有较大的差异,尤其是kafka,请尽量找相似或相同的版本号作为参考
名称
版本
gi ...
阅读更多
关于锁的一些思考|技术积累|积累尽量减小因为引入锁而带来的影响,有以下几个思考点
尽量减小锁的范围
在实现跳表时,我定义的节点数据结构如下
123456class Node<K extends Comparable<K>, V> { K key; V value; ...
阅读更多
JDK14更新后的AQS源码解读|技术积累|积累
在JDK 14版本,Doug Lea对AQS的实现进行了一次大的变更,但基本的数据结构还是基于CLH的同步队列+单链表的等待队列
相比之前的版本,新版的AQS最明显的变化是:尽量延后线程节点进入队列的时间
具体代码改动见github
前言
本文注意以ReentrantLock为例,分析AQS加锁 ...
阅读更多
kafka server端源码分析之拉取消息|Kafka Tutorial|kafka-中间件-消息
发送fetch请求的对象有2类:client和follower,client拉取时有高水位线的限制,follower则没有,本文仅介绍client,
follower拉取时涉及到副本同步,以后单独分析
术语回顾
在kafka消息中有2个重要的术语:HW(HighWatermark),LEO(L ...
阅读更多
kafka server端源码分析之接收消息|Kafka Tutorial|kafka-中间件-消息
承接上篇搭建kafka源码环境之后,本文正式开始分析
前文
在前文kafka网络请求处理模型中提到, KafkaServer#startup方法涵盖了kafka server所有模块的初始化
KafkaRequestHandlerPool线程池中的KafkaRequestHandler对象通过调 ...
阅读更多
kafka网络请求处理模型|Kafka Tutorial|kafka-中间件-消息众所周知,kafka是一款高性能,可伸缩的消息队列中间件,在一个庞大的kafka集群中,每秒能处理几十万条消息,那么必然存在着大量的网络请求,kafka是如何构建自己的网络请求模型的呢,答案就是Reactor
Reactor模型
Reactor线程模型即为Java NIO中的selector模型。最 ...
阅读更多
ByteBuffer浅显易懂的图解原理|技术积累|nio本文希望通过图解的形式帮助更多新手理解ByteBuffer的使用
ByteBuffer的作用
我们知道在java中读写文件都是通过流操作的,那么想象一下要读取一个大文件,每次都从流中一个字节一个字节的读取,效率有多低下,缓存是必须存在的,就好比搬一堆沙子,总不能一粒一粒的搬,得要用个小推车来搬运
那 ...
阅读更多
快速学习scala语言及常用语法汇总|Kafka Tutorial|kafka-scala
阅读kafka源码的一大障碍就是scala语言,本文的目的是罗列kakfa源码中涉及到的基础源码知识,一些不常用的东西不会涉及,同时我也会不断总结遇到的语法特性,因为极个别语法俺也不会!
环境
和java一样,scala也需要sdk来运行程序,scala也是jvm语言,请事先保证本机上已安装ja ...
阅读更多
《快手万亿级别Kafka集群应用实践与技术演进之路》观后心得|架构随笔录|架构-演讲
本文用于记录观看快手万亿级别Kafka集群应用实践与技术演进之路演讲后的心得,从中确实学到了很多,快手作为kafka的重度使用者,对kafka集群从不同角度优化,其中发现问题,解决问题的思路都值得学习
以下这张图是本次演讲的内容,分章节阐述具体内容
平滑扩容
kafka集群节点扩容时,要做副本 ...
阅读更多
kafka源码环境搭建|Kafka Tutorial|kafka-中间件-消息源码下载
从kafka官网下载源码压缩包,以2.0.1版本为例,选择-src结尾的压缩包
依赖环境
kafka采用gradle构建,根据kafka的git提交记录,采用4.10.3版本构建,如果本地有别的gradle版本,可以尝试用sdkman这款工具来管理,一个命令即可切换版本
kafka使用s ...
阅读更多