01 课程大纲.html · 01 课程大纲.pdf · 02 课程笔记、项目代码.html · 02 课程笔记、项目代码.pdf · 03 001_Kafka
* 01 课程大纲.html
* 01 课程大纲.pdf
* 02 课程笔记、项目代码.html
* 02 课程笔记、项目代码.pdf
* 03 001_Kafka源码分析环境搭建:JDK、Scala以及Gradle的安装
* 04 002_Kafka源码分析环境搭建:在Windows上部署和启动ZooKeeper_ev
* 05 003_Kafka源码分析环境搭建:使用Gradle来构建Kafka源码_ev
* 06 004_Kafka源码分析环境搭建:将构建好的Kafka源码导入IntelliJ IDEA_ev
* 07 005_Kafka源码分析环境搭建:对IntelliJ IDEA中的Kafka进行正确配置_ev
* 08 006_Kafka源码分析环境搭建:直接在IntelliJ IDEA中启动Kafka_ev
* 09 007_Kafka源码分析环境搭建:验证IntelliJ IDEA中启动的Kafka能否使_ev
* 10 008_从一条消息的生产发送开始如何逐步探索Kafka运行的全流程
* 11 009_回顾一下Kafka生产端是如何进行开发的以及涉及哪些东西
* 12 010_生产端的核心:KafkaProducer初始化时会涉及到哪些组件
* 13 011_集群元数据拉取组件的分析以及多个拉取触发时机的分析
* 14 012_在源码中分析核心参数的含义:请求超时、缓冲大小、请求大小
* 15 013_内存缓冲区的构建以及消息batch打包发送request的原理
* 16 014_底层的网络通信组件初探以及核心网络参数的分析
* 17 015_数据发送线程是如何初始化以及acks参数在源码中的含义分析
* 18 016_KafkaProducer初始化的时候到底会不会去拉取集群元数据
* 19 017_分析一下Kafka集群元数据在客户端缓存采用的数据结构
* 20 018_初步窥探客户端发送消息时源码运行的大致流程
* 21 019_从未有过的细致源码研究:工业级的客户端如何进行异常处理
* 22 020_如何对topic元数据进行细粒度的按需加载以及同步等待
* 23 021_为了搞清楚元数据加载的过程,回头看看Sender线程的初始化
* 24 022_是否有必要现在就对底层的网络通信组件深入分析
* 25 023_如果没有指定分区key是如何对消息负载均衡分发到分区的
* 26 024_如何根据分区key将消息路由到同一个分区中去
* 27 025_快速过一下在将消息发送到内存缓冲区之前做的准备工作
* 28 026_大致浏览一下源码中将消息写入内存缓冲的运行流程
* 29 027_如何基于CopyOnWriteMap实现线程安全的分区队列构建
* 30 028_对队列加锁之后尝试将消息放入队列已有的batch中
* 31 029_如果内存空间充足,那么如何基于NIO ByteBuffer分配内存
* 32 030_为什么要在内存缓冲写入算法中引入double-check模式
* 33 031_如何基于申请的ByteBuffer构造Batch并放入队列
* 34 032_一条消息是如何按照二进制协议写入Batch的ByteBuffer的
* 35 033_频繁写入的消息是如何直接进入已有的分区batch中的
* 36 034_如果一个Batch被写满了,如何申请内存块构建下一个Batch
* 37 035_如何基于缓冲池中的ByteBuffer来复用内存空间
* 38 036_不断申请内存空间的情况下导致可用内存耗尽了怎么办
* 39 037_Kafka生产端唯一的一个IO线程到底在干什么
* 40 038_内存缓冲中的Batch到底是如何被判定为可以发送出去的(一)
* 41 039_内存缓冲中的Batch到底是如何被判定为可以发送出去的(二)
* 42 040_内存缓冲中的Batch到底是如何被判定为可以发送出去的(三)
* 43 041_如何检查筛选出来的目标Broker可以发送数据过去
* 44 042_如果跟Broker之间还没建立连接,如何检查是否可以建立连接_ev
* 45 043_深入底层网络通信的起点:通过哪个核心组件与Broker建立连接_ev
* 46 044_回头看看NetworkClient网络通信组件是如何初始化的_ev
* 47 045_惊讶的发现:Kafka网络通信底层是基于原生的Java NIO开发的!_ev
* 48 046_KafkaChannel是如何对原生Java NIO的SocketChannel进_ev
* 49 047_Kafka封装的Selector是如何初始化与Broker的连接的_ev
* 50 048_工业级组件中的NIO:KeepAlive、SocketBuffer、TcpNoDe
* 51 049_NIO中的SocketChannel.connect到底具备什么样的业务语义
* 52 050_发起连接请求之后针对不同的情况是如何进行缓存的
* 53 051_给大家一个学习工业级NIO编程的提示:封装原生API以及缓存机制
* 54 052_如果跟Broker的连接还没完成建立,那么会向他发送请求吗
* 55 053_如何通过不断轮询的poll方法完成跟目标Broker的连接
* 56 054_连接建立之后如何获取要发送到每个Broker去的所有Batch
* 57 055_针对每个目标Broker构建一个很多Batch组成的Request
* 58 056_如何将要发送到每个Broker去的Request依托封装组件暂存起来
* 59 057_在不断轮询的万能poll方法中如何基于NIO将请求发送出去
* 60 058_回头看看发送完请求之后是如何让Selector关注OP_READ事件的
* 61 059_工业级网络编程中的NIO实践:基于位运算控制事件的监听
* 62 060_对于已经发送给Broker的请求会进行什么样的后续处理
* 63 061_看看Kafka生产端的NIO编程是如何进行拆包类问题的处理的
* 64 062_对一个Broker如何同时发送出去多个inFilghtRequest
* 65 063_如果Broker返回响应消息,在OP_READ事件中是如何处理的
* 66 064_读取响应时在底层如何通过NIO编程实现数据的读取
* 67 065_工业级NIO编程实践:读取数据遇到粘包类问题怎么处理
* 68 066_工业级NIO编程实践:一条消息无法读完的拆包类问题怎么处理
* 69 067_对刚读取出来的暂存状态的响应消息是如何进行处理的
* 70 068_对于确认读取完毕的响应消息是如何解析二进制字节数组的
* 71 069_如果一个请求被正确处理之后如何调用设置的回调函数
* 72 070_从源码层面看看如果一个请求处理异常会进行什么样的处理
* 73 071_Batch被处理完毕之后是如何释放底层的内存块资源到缓冲池的
* 74 072_深入看看请求处理异常之后的重试机制是如何实现的
* 75 073_重新在内存缓冲里入队的Batch在什么时机下会判定可以重试
* 76 074_对于失败的请求多次重试发送之后的结果又会怎么处理呢
* 77 075_如果一个Batch一直停留在内存缓冲里,如何检测到他的超时
* 78 076_如果一个inFlightRequest一直没有收到响应,如何检测他的超时
* 79 077_KafkaProducer源码精华总结:内存管理、缓存机制、NIO网络通信





![[衡天云]爆款云服务器 低至12元/月](/hty.png)