Kafka核心源码解读

Kafka核心源码解读 / 从底层到实战,深度解析源码

胡夕 Apache Kafka Committer,老虎证券技术总监
  • 课程目录
  • 课程介绍
  • 在线阅读:开篇词 | 阅读源码,逐渐成了职业进阶道路上的“必选项”

    为什么读源码逐渐成为了必选项?它究竟有什么作用呢?

  • 导读 | 构建Kafka工程和源码阅读环境、Scala语言热身

    在正式开始学习源码之前,我先来说一说构建Kafka工程以及搭建Kafka源码阅读环境的具体方法。

  • 重磅加餐 | 带你快速入门Scala语言

    学完这节课以后,相信你能够在较短的时间里掌握这些实用的Scala语法,彻底扫清源码阅读路上的编程语言障碍。

  • 01 | 日志段:保存消息文件的对象是怎么实现的?

    不管是学习什么消息引擎,弄明白消息建模方式都是首要的问题。

  • 02 | 日志(上):日志究竟是如何加载日志段的?

    既然Log源码要管理日志段对象,那么它就必须先把所有日志段对象加载到内存里面。这个过程是怎么实现的呢?

  • 03 | 日志(下):彻底搞懂Log对象的常见操作

    上节课,我们一起了解了日志加载日志段的过程。今天,我会继续带你学习Log源码,给你介绍Log对象的常见操作。

  • 04 | 索引(上):改进的二分查找算法在Kafka索引的应用

    我们来详细学习下Kafka中的索引机制,以及社区如何应用二分查找算法实现快速定位索引项。

  • 05 | 索引(下):位移索引和时间戳索引的区别是什么?

    位移索引和时间戳索引到底是做什么用的呢?它们之间的区别是什么?今天,我就为你揭晓这些问题的答案。

  • 06 | 请求通道:如何实现Kafka请求队列?

    我们一起学习下Broker底层请求对象的建模和请求队列的实现原理,以及Broker请求处理方面的核心监控指标。

  • 07 | SocketServer(上):Kafka到底是怎么应用NIO实现网络通信的?

    只有明确知道SocketServer组件的工作原理,才能制定出恰当的解决方案,并有针对性地给出调优对应的参数。

  • 08 | SocketServer(中):请求还要区分优先级?

    今天,我们接着说SocketServer源码,重点学习下社区是如何对不同类型的请求进行优先级划分的。

  • 09 | SocketServer(下):请求处理全流程源码分析

    弄明白请求处理的原理,有助于我们有针对性地调优Broker端请求处理的性能。

  • 10 | KafkaApis:Kafka最重要的源码入口,没有之一

    在上节课中,我提到过,请求的实际处理逻辑是封装在KafkaApis类中的。你一定很想知道,这个类到底是做什么的吧。

  • 11 | Controller元数据:Controller都保存有哪些东西?有几种状态?

    想要完整地了解Controller的工作原理,我们首先就要学习它管理了哪些数据。

  • 12 | ControllerChannelManager:Controller如何管理请求发送?

    Controller究竟是如何与集群Broker进行交互的?究竟是怎么实现管理集群元数据的功能的?

  • 13 | ControllerEventManager:变身单线程后的Controller如何处理事件?

    社区对Controller代码结构改造的重要一环,就是将多线程并发访问的方式改为了单线程的事件队列方式。

  • 14 | Controller选举是怎么实现的?

    作为Broker端最重要的组件之一,Controller在Kafka中的地位无可替代。

  • 15 | 如何理解Controller在Kafka集群中的作用?

    集群成员管理和主题管理是Controller最核心的两个功能,今天,我就带你深入了解下它们的实现代码。

  • 16 | TopicDeletionManager: Topic是怎么被删除的?

    今天,我们先来学习TopicDeletionManager,看一下Kafka是如何删除一个主题的。

  • 17 | ReplicaStateMachine:揭秘副本状态机实现原理

    弄明白副本状态机的原理,非常有助于我们从根本上定位数据不一致问题。

  • 18 | PartitionStateMachine:分区状态转换如何实现?

    学完了今天的课程之后,你不但能够说出4种Leader选举的场景,还能总结出它们的共性。对于面试来说,绝对是个加分项!

  • 19 | TimingWheel:探究Kafka定时器背后的高效时间轮算法

    Kafka应用基于时间轮算法管理延迟请求的代码简洁精炼,而且和业务逻辑代码完全解耦,你可以从0到1地照搬到你的项目中。

  • 20 | DelayedOperation:Broker是怎么延时处理请求的?

    今天,我们就来重点学习下负责创建和维护分层时间轮,并将它集成到整体框架中去的源码。

  • 21 | AbstractFetcherThread:拉取消息分几步?

    对于分布式系统而言,一个必须要解决的问题,就是如何确保所有副本上的数据是一致的。

  • 22 | ReplicaFetcherThread:Follower如何拉取Leader消息?

    学完这节课,你就能完整地理解,Follower副本通过拉取线程,从Leader副本获取消息并处理的流程了。

  • 23 | ReplicaManager(上):必须要掌握的副本管理类定义和核心字段

    副本同步过程中出现的问题大多很难定位和解决,熟练掌握这部分源码,将有助于我们深入探索线上生产环境上问题的根本原因。

  • 24 | ReplicaManager(中):副本管理器是如何读写副本的?

    Follower副本是如何同步Leader副本数据的呢?这节课,我们来一探究竟!

  • 25 | ReplicaManager(下):副本管理器是如何管理副本的?

    除了对副本进行读写之外,副本管理器还有一个重要的功能,就是管理副本和对应的分区。

  • 26 | MetadataCache:Broker是怎么异步更新元数据缓存的?

    MetadataCache是每台Broker上都会保存的数据,应用场景非常广泛,今天,我们就来学习一下。

  • 27 | 消费者组元数据(上):消费者组都有哪些元数据?

    今天,我们学习消费者组元数据的源码实现,这是我们理解消费者组工作机制和深入学习消费者组管理组件的基础。

  • 28 | 消费者组元数据(下):Kafka如何管理这些元数据?

    Kafka定义了非常多的元数据,那么,这就必然涉及到对元数据的管理问题了。这些元数据的类型不同,管理策略也就不一样。

  • 29 | GroupMetadataManager:组元数据管理器是个什么东西?

    从GroupMetadataManager提供的功能来看,可以把它称作消费者组管理器,它定义的方法提供的都是组级别功能。

  • 30 | GroupMetadataManager:位移主题保存的只是位移吗?

    Kafka内部位移主题,是Coordinator端用来保存和记录消费者组信息的重要工具。

  • 31 | GroupMetadataManager:查询位移时,不用读取位移主题?

    我们总说,位移主题是个神秘的主题,除了它并非我们亲自创建之外,它的神秘之处还体现在,它的读写也不由我们控制。

  • 32 | GroupCoordinator:在Rebalance中,Coordinator如何处理成员入组?

    如果你不了解Rebalance的源码机制的话,就很容易掉进它无意中铺设的“陷阱”里。

  • 33 | GroupCoordinator:在Rebalance中,如何进行组同步?

    今天,我们继续学习消费者组Rebalance流程,这节课我们重点学习这个流程的第2大步,也就是组同步。

  • 特别放送(一)| 经典的Kafka学习资料有哪些?

    借着这个特别放送的环节,我专门为你搜罗了各种Kafka学习资料,并把它们做成了清单,一起分享给你。

  • 特别放送(二)| 一篇文章带你了解参与开源社区的全部流程

    参照着这套最佳实践,你能够轻松地参与到社区的日常开发中,甚至是成为社区Contributor中的一员。

  • 特别放送(三)| 我是怎么度过日常一天的?

    我并不敢轻言说我的这种生活就叫自律,但我的的确确乐在其中,不能自拔。

  • 特别放送(四)| 20道经典的Kafka面试题详解

    今天,我会具体给你讲解20道面试题。除了答案之外,我还会告诉你考核的初衷以及加分小技巧。

  • 特别放送(五) | Kafka 社区的重磅功能:移除 ZooKeeper 依赖

    我猜,你一定很想知道,社区究竟打算怎么移除ZooKeeper呢?别急,今天,我就带你一步步地来了解下社区的计划。

  • 期中测试 | 这些源码知识,你都掌握了吗?

    我们的课程已经更新一半了,今天,我们来进行一场期中考试。

  • 期末测试 | 一套习题,测试你的掌握程度

    咱们课程的核心内容都已经更新完毕了,我给你准备了一份期末测试题,希望可以帮你进行自检。我们结束语见!

  • 结束语 | 源码学习,我们才刚上路呢

    阅读源码仿佛一场漫长的登山之旅,半山腰很挤,我们山顶上见。

44讲

你将获得

  • 系统高效的源码阅读方法
  • 深入理解 Kafka 的底层原理
  • 快速定位线上问题并制定调优方案
  • 25个典型案例分享+面试题讲解

讲师介绍


课程介绍

除此之外,很多公司在招聘资深技术岗时,常常会要求应聘者“至少读过一种开源框架的源码”。这也就意味着,阅读源码正在从“加分项”向“必选项”转变。

读源码之初,我们的目标都是“从入门到精通”,但是,在实际阅读源码的过程中,很多人却遇到了很多棘手的问题,结果只能“从入门到放弃”。这些问题主要是:

  • 源码有这么多,该从哪里开始读?
  • 读源码太枯燥了,有没有什么科学有趣的方法呢?
  • ……

基于这些问题,我们邀请胡夕老师开设了《Kafka核心源码解读》这个课程。鉴于服务器端源码是理解Kafka架构特别是系统运行原理的基础,老师精选出了最重要的组件代码,按照功能将其划分为7个模块,采用“丰富的流程图+代码注释”的方式进行细粒度讲解。

同时,这个课程还有大量的真实案例、社区的最新动态、经典面试题的系统解答,让你不仅能读懂源码,还能做到借助源码高效地解决真实问题。

常见问题

问:Kafka服务器端源码由Scala语言编写而成,不会Scala语言也可以学习这个课程吗?

答:这部分源码并没有用到Scala多少高大上的语法特性。即使你不熟悉Scala语言也没关系。你不需要完整、系统地学习这门语言,只要能简单了解基本的函数式编程风格,以及它的几个关键特性,就足够了。如果你有Java语言基础,那就更好了,因为它们有很多特性非常相似。

当然了,为了不影响你理解课程内涉及的源码,“导读”会先给你介绍下Scala语言。课程里涉及Scala比较难的语言特性时,也会具体解释。所以,你完全不用担心语言的问题。

问:非Kafka使用者是否可以从这个课程中受益?

答:如果你是开源框架爱好者,你可以从这门课里学到很多优秀的设计理念,进一步提升你的系统架构能力。另外,很多公司在招聘高级技术人员时通常会要求应聘者“至少读过一种开源框架的源码”,如果你现在没有更好的选项,不妨学习下这门课,它会让你快速掌握一种源码。

课程模块设计

课程主体分为7个模块。

  • 日志模块:详细介绍消息是如何被定义和组织的,帮你掌握Kafka消息在底层被读写的方法代码是怎么实现的。

  • 请求处理模块:分析各类Kafka请求在网络层传输以及被处理的逻辑代码,尤其是Reactor模式在Kafka中的实现。

  • 副本管理模块:主要阐述分区副本对象的管理逻辑代码,包括副本的创建、状态流转、删除等操作,帮你搞懂副本在Kafka中的状态流转路径。

  • 延迟操作模块:重点讲解Kafka如何实现延迟操作,以及一个O(N)时间复杂度的时间轮算法,带你搞懂延迟操作底层的实现架构。

  • 消费者组管理模块:详细分析消费者组协调器的各类管理功能代码,比如创建、管理、删除等,GroupCoordinator是Kafka中最核心的组件之一。

  • Controller模块:结合一些实际案例,给你分享Controller组件管理Kafka集群元数据的代码和基于ZooKeeper的Controller选举。

  • 状态机模块:重点分析副本和分区的状态流转逻辑,以及Kafka集群是如何管理副本对象和分区对象的。

除此之外,还设置了“特别放送”模块,与你分享一些经典的学习资料、参与开源社区的全部流程,解析经典的面试题等,全方位提升你的源码阅读能力和Kafka实战能力。


课程目录


适合人群

  1. 对Kafka有所了解,或者订阅过《Kafka核心技术与实战》专栏,想要了解Kafka底层原理、掌握源码阅读方法,以及解决实际操作问题的工程师。
  2. 任何对学习源码或者是开源框架感兴趣的软件工程师或架构师。

特别放送

免费领取福利



限时活动推荐


订阅须知

随机推荐

魔幻厨房烘焙模具使用体验怎么样?使用两个月评测反馈!

云蕾一次性用品好不好?良心点测!

法丽兹饼干-膨化入手怎么样?测评大揭秘!

法丽兹饼干-膨化实用性高,购买推荐吗?测评结果报告!

法丽兹饼干-膨化评测数据如何?性能评测介绍?

松下ES-ERT3是否值得入手?买前必看评测!