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