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网络通信