77讲玩转Kafka内核源码
通过本套课程的学习,你将掌握以下内容:
缓冲机制:从源码层面分析 kafka 缓冲机制的底层数据结构
内存管理:缓冲池如何通过精妙的设计来减轻 JVM GC
网络通信:深入 Kafka 底层源码,看看 Kafka 的网络通信机制,工业级的粘包拆包如何处理
001_Kafka源码分析环境搭建:JDK、Scala以及Gradle的安装
002_Kafka源码分析环境搭建:在Windows上部署和启动ZooKeeper
003_Kafka源码分析环境搭建:使用Gradle来构建Kafka源码
004_Kafka源码分析环境搭建:将构建好的Kafka源码导入IntelliJ IDEA中
005_Kafka源码分析环境搭建:对IntelliJ IDEA中的Kafka进行正确配置
006_Kafka源码分析环境搭建:直接在IntelliJ IDEA中启动Kafka
007_Kafka源码分析环境搭建:验证IntelliJ IDEA中启动的Kafka能否使用
008_从一条消息的生产发送开始如何逐步探索Kafka运行的全流程
009_回顾一下Kafka生产端是如何进行开发的以及涉及哪些东西
010_生产端的核心:KafkaProducer初始化时会涉及到哪些组件?
011_集群元数据拉取组件的分析以及多个拉取触发时机的分析
012_在源码中分析核心参数的含义:请求超时、缓冲大小、请求大小
013_内存缓冲区的构建以及消息batch打包发送request的原理
014_底层的网络通信组件初探以及核心网络参数的分析
015_数据发送线程是如何初始化以及acks参数在源码中的含义分析
016_KafkaProducer初始化的时候到底会不会去拉取集群元数据?
017_分析一下Kafka集群元数据在客户端缓存采用的数据结构
018_初步窥探客户端发送消息时源码运行的大致流程
019_从未有过的细致源码研究:工业级的客户端如何进行异常处理?
020_如何对topic元数据进行细粒度的按需加载以及同步等待?
021_为了搞清楚元数据加载的过程,回头看看Sender线程的初始化
022_是否有必要现在就对底层的网络通信组件深入分析?
023_如果没有指定分区key是如何对消息负载均衡分发到分区的?
024_如何根据分区key将消息路由到同一个分区中去?
025_快速过一下在将消息发送到内存缓冲区之前做的准备工作
026_大致浏览一下源码中将消息写入内存缓冲的运行流程
027_如何基于CopyOnWriteMap实现线程安全的分区队列构建
028_对队列加锁之后尝试将消息放入队列已有的batch中
029_如果内存空间充足,那么如何基于NIO ByteBuffer分配内存?
030_为什么要在内存缓冲写入算法中引入double-check模式?
031_如何基于申请的ByteBuffer构造Batch并放入队列?
032_一条消息是如何按照二进制协议写入Batch的ByteBuffer的?
033_频繁写入的消息是如何直接进入已有的分区batch中的?
034_如果一个Batch被写满了,如何申请内存块构建下一个Batch?
035_如何基于缓冲池中的ByteBuffer来复用内存空间?
036_不断申请内存空间的情况下导致可用内存耗尽了怎么办?
037_Kafka生产端唯一的一个IO线程到底在干什么?
038_内存缓冲中的Batch到底是如何被判定为可以发送出去的?(一)
039_内存缓冲中的Batch到底是如何被判定为可以发送出去的?(二)
040_内存缓冲中的Batch到底是如何被判定为可以发送出去的?(三)
041_如何检查筛选出来的目标Broker可以发送数据过去?
042_如果跟Broker之间还没建立连接,如何检查是否可以建立连接?
043_深入底层网络通信的起点:通过哪个核心组件与Broker建立连接?
044_回头看看NetworkClient网络通信组件是如何初始化的?
045_惊讶的发现:Kafka网络通信底层是基于原生的Java NIO开发的!
046_KafkaChannel是如何对原生Java NIO的SocketChannel进行封装的?
047_Kafka封装的Selector是如何初始化与Broker的连接的?
048_工业级组件中的NIO:KeepAlive、SocketBuffer、TcpNoDelay
049_NIO中的SocketChannel.connect到底具备什么样的业务语义?
050_发起连接请求之后针对不同的情况是如何进行缓存的?
051_给大家一个学习工业级NIO编程的提示:封装原生API以及缓存机制
052_如果跟Broker的连接还没完成建立,那么会向他发送请求吗?
053_如何通过不断轮询的poll方法完成跟目标Broker的连接
054_连接建立之后如何获取要发送到每个Broker去的所有Batch?
055_针对每个目标Broker构建一个很多Batch组成的Request
056_如何将要发送到每个Broker去的Request依托封装组件暂存起来?
057_在不断轮询的万能poll方法中如何基于NIO将请求发送出去?
058_回头看看发送完请求之后是如何让Selector关注OP_READ事件的?
059_工业级网络编程中的NIO实践:基于位运算控制事件的监听
060_对于已经发送给Broker的请求会进行什么样的后续处理?
061_看看Kafka生产端的NIO编程是如何进行拆包类问题的处理的?
062_对一个Broker如何同时发送出去多个inFilghtRequest?
063_如果Broker返回响应消息,在OP_READ事件中是如何处理的?
064_读取响应时在底层如何通过NIO编程实现数据的读取?
065_工业级NIO编程实践:读取数据遇到粘包类问题怎么处理?
066_工业级NIO编程实践:一条消息无法读完的拆包类问题怎么处理?
067_对刚读取出来的暂存状态的响应消息是如何进行处理的?
068_对于确认读取完毕的响应消息是如何解析二进制字节数组的?
069_如果一个请求被正确处理之后如何调用设置的回调函数?
070_从源码层面看看如果一个请求处理异常会进行什么样的处理?
071_Batch被处理完毕之后是如何释放底层的内存块资源到缓冲池的?
072_深入看看请求处理异常之后的重试机制是如何实现的?
073_重新在内存缓冲里入队的Batch在什么时机下会判定可以重试?
074_对于失败的请求多次重试发送之后的结果又会怎么处理呢
075_如果一个Batch一直停留在内存缓冲里,如何检测到他的超时?
076_如果一个inFlightRequest一直没有收到响应,如何检测他的超时?
077_KafkaProducer源码精华总结:内存管理、缓存机制、NIO网络通信
视频获取方式
2、将以下标黄文字分享到技术群(2个技术群、200人以上/群、消息保留3分钟以上)
大量高质量完整视频课程免费领(已更新100套)
https://www.yuque.com/leewoo/kb/tsi9lg
4、符合2中条件的截图,私聊发送
5、得到网盘密码,下载资源