vlambda博客
学习文章列表

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、得到网盘密码,下载资源