Kafka 原理与源码精讲- 掘金小册课程推荐/优惠

Kafka 原理与源码精讲--掘金小册课程推荐/优惠

Kafka 源码+ Kafka 架构原理 + 生产环境落地
肖恩架构
33讲 | 945人已学习
优惠价¥39.9
官网优惠购买

版权声明

本站非掘金小册官网,与官方无任何关系。我们不提供课程下载或详细内容,仅作为课程分享和推荐平台。我们鼓励大家支持正版,尊重创作者的劳动成果,这样不仅能帮助创作者持续产出优质内容,也能让自己获得更好的学习体验。请通过官方渠道购买和学习课程,感谢您的理解与支持。

课程详情

课程介绍

你能学到什么

  • Kafka 实现高吞吐消息的架构原理
  • Kafka 实现消息可靠性原理
  • Kafka 生产环境如何落地
  • 全面学 Kafka 各个组件,系统掌握 Kafka 的原理;
  • 系统学习 Kafak 的轮子组件,如内存缓冲池,基于 NIO 的通信模块;
  • Kafka 高可靠分布式设计;
  • Kafka 底层文件存储设计;
  • Kafka 高吞吐架设计在服务端是如何体现的?
  • Kafka 如何保证不丢消息及消息不重复的?
  • 在生产环境 Kafka 如何落地?

作者介绍

肖恩Sean,京东集团架构师。10 年+ 互联网一线开发经验。先后就职于美团、去哪儿网、京东等大厂。长期从事基础架构中间件研发,特别对于消息队列有深入理解和实践。参与过自研消息队列中间件的工作,主导了 Raft 协议、消息轨迹、消息队列消费模型的演进等技术点在自研消息队列中间件的落地。同时,对于 Kafka、RocketMQ 等经典消息队列也达到了源码级的理解。

小册介绍

我始终相信学会了有价值的知识后,你的知识会在每次实践中不断被利用而创造价值,而每次的实践又加深了你对知识的理解,周而复始,你会越来越厉害。 如果你的学习和工作态度没有问题,那么现在最大的问题就是,什么是有价值的知识,以及如何学习有价值的知识。一般情况下,对我们后端技术人员来说,我们需要挑战的领域无非这么几个:

  • 海量网络通信
  • 海量存储
  • 分布式

但是,很少能有一种中间件能把这些领域全部都包含进来,但是消息队列就是一个。如果要评价一个消息队列是否是有是否是优秀的,那么就要看它在网络通信,存储,分布式上的实现是否优秀。毫无疑问,KAFKA 在所以消息队列里是最优秀的,最有设计感的消息队列系统。把 KAFKA 研究透了,会为你以后的工作打下坚实的基础

希望大家能够跟我一起开启这个有意义的小册。

首先,我们看看 从 KAFKA 中能具体学到哪些具体的 有价值的知识

通过学习本小册我们能学到什么呢

1. 可以帮助你对Kafka的内部设计原理有了更深的了解,提升了架构能力和代码的质量

Kafka 可以说是全世界使用最多的消息队列,而且 Kafka 是设计最复杂的消息队列(当然设计复杂并不代表不好用,正好相反它的易用性极高)。 比如下图的生产者架构设计:

我们先简单回顾下Kafka生产者的架构模型特点,以及可能提出的疑问:

  • 产生消息的主线程和真正负责网络发送的 Sender 子线程各司其职,于是通过异步解耦实现了生产端的高吞吐,那么主线程和Sender子线程是如何协作的呢?
  • 主线程负责把消息放入缓冲区,缓冲区主要由实现 ConcurrentMap 接口的 CopyOnWriteMap 类组成,CopyOnWriteMap 类是 为了保证线程安全自己设计的 map 集合类,那么这个类是如何设计的呢?
  • 既然有缓冲区那么就一定会涉及内存的存储,那么为了提高内存的复用减少不必要的 GC,KAFKA 设计了BufferPool,也就是上图最下面的模块,那么这个 BufferPool 是如何设计的呢?
  • 如果缓冲区的数据发送失败了,或者发送数据超时了,该如何处理呢? .....,其实根据上面的架构图还能提出很多的问题,大家可以看到,仅仅一个生产者就能有如此多的问题需要我们去探索,那么我们是不是应该真的通过好好理解Kafka的源码,通过理解源码来洞察Kafka的实现思路,为我们以后自己设计类似的功能组件提供思路。

2. 源码级定位线上bug。快速定位 KAKFA 运行时出现的问题和异常,保证线上 KAFKA 的稳定性

比如,下图是Sender线程发送消息的流程。

在上图的下部的中间位置可以看到一个集合 inFlightRequests,这个集合是一个map类 Map<String, Deque<NetworkClient.InFlightRequest>>,key是 broker 的 broker_id,value 是向这个 broker 发送消息的 Deque 队列。这个队列表示向某个 broker 发送了但是还收到响应的消息,也就是说broker还没处理完这些消息。于是可以这样理解这个 Deque 队列的长度就是某个 broker 对这个生产者发送消息的负载。这个长度是一个参数可以设置,当时由于线上参数设置的比较大达到了100,于是 broker 出现了假死的现象。通过我对源码的了解,我及时把参数调成了默认参数5,才解决了这个问题,可见了解参数是多么的重要。

3. 大幅提高你的代码能力。 下图是主线程并发向缓冲区填充消息的示意图:

  • 大家都知道生产者是线程安全的,这样就会造成多个线程并发向缓冲区填充消息,如果保证高并发的同时保证数据不会问题呢?
  • 多线程的场景下,缓存区如何高效利用不浪费存储空间呢? 这里面用到了局部锁,重试等设计理念,这在后面章节都会有介绍。这个设计大家完全可以借鉴到自己的高并发系统模块中。

4. 你还能参加 Kafka 开源社区,成为一名代码贡献者(Contributor)。 在社区中,你能够和全世界的 Kafka 源码贡献者协同工作,彼此分享交流,想想就是一件很有意思的事情。特别是当你的代码被社区采纳之后,全世界的 Kafka 使用者都会使用你写的代码。这简直太让人兴奋了,不是吗?总而言之,阅读源码的好处真的很多,既能精进代码功力,又能锤炼架构技巧,还能高效地解决实际问题,有百利而无一害。

我们这节课的特点:

  1. 对关键代码都有详细的解读,注释会非常详细;
  2. 对一些流程较多的代码流程,我会给大家画出流程图有利于大家的理解;
  3. 对每篇文章我都有对应的视频教学(作者个人免费提供,现在视频已经更新完成了生产者),让大家更好的理解。下面提供几个视频链接,大家可以先睹为快: 消息在缓冲区时如何存储的?

客户端网络通信如何实现?

整个知识体系你可以参考下面的知识导图:

免费视频讲解

同时,本小册在文本文章的基础上给大家提供了视频讲解,而且讲解内容不仅包含源码,也会给大家详细介绍 KAFKA 的设计精髓,现在已经更新到生产者,纯粹是作者本人的额外贡献,如果有兴趣可以关注下面的B站主页,包含所有相关的视频教学内容:

https://space.bilibili.com/391958110

视频免费试看

生产者如何获取元数据?https://www.bilibili.com/video/BV1ZT4y167Jg

消息在缓冲区是如何存储的?https://www.bilibili.com/video/BV1cZ4y1y7C5

客户端网络通信如何实现的?https://www.bilibili.com/video/BV1eR4y1w7Pa

同时,每篇文章对应的视频都已在文章一开始注明,方便大家学习交流

适宜人群

  1. 普通业务工程师:通过对 KAFKA 的架构和源码的理解能够更好地使用 KAFKA,甚至对 Kafka 做针对性的调优。
  2. Kafka 运维人员:通过 KAFKA 从架构设计到源码的学习,可以更好地提升 KAFKA 运维人员对 KAFKA 整体架构的认知,有利于运维人员及时发现问题和解决问题。
  3. 基础架构中间件工程师:拓展知识面,扩大认知。KAFKA 是一个设计非常经典的中间件,无论是经典的架构设计还是代码设计,都是很值得从事中间件设计工作的工程师借鉴学习的。

课程目录

  • 技术选型:为什么互联网大厂都爱用 Kafka?
  • 挑战生产者设计的复杂度:生产者业务流程
  • 真正的发送消息 : Sender线程
  • 高吞吐利器之一:生产者缓冲区
  • 两个完美轮子:Buffer的池化和 CopyOnWriteMap
  • 生产端缓冲区总结 : 缓冲区处理消息流程
  • 客户端的通信能力:客户端网络通信组件
  • 有的放矢:生产者的元数据
  • 对NIO的优雅封装(下):封装 Selector
  • 对NIO的优雅封装(上):封装SocketChannel、Buffer
  • 消费者的通信:消费者网络通信层
  • 步调一致:消费者协调器
  • 消费者挂了怎么办?消费组重平衡(上)
  • 消费者挂了怎么办?消费组重平衡(下)
  • 消费者从哪里消费:消费者订阅状态和 offset 操作
  • 服务端的核心:SocketServer 类和 Reactor 模式简介
  • 消费者如何消费消息:消费者拉取数据的方法
  • 消费者总结:整体流程是怎样的?
  • 分而治之:网络层 Reactor 设计模型
  • 完美的服务端网络层设计:服务端网络层总结
  • 完美的服务端网络层设计 :RequestChannel 类、KafkaRequestHandler 类和 KafkaApis 类
  • Message 家的功能:日志操作的核心方法
  • 简介 Message 的家 :存储层简介和日志读写的大体流程
  • Message 的家是什么样?:日志分段文件与索引文件
  • Message 的家是什么样?:文件存储介绍和日志分段管理
  • Message 的家规:日志管理
  • 多重影子:副本管理
  • Kafka 生产环境落地:Kafka 使用规范
  • Kafka 生产者的吞吐量为啥这么高
  • 可靠性设计:Kafka 是如何做到消息不丢或不重复的?
  • 架构设计总结:Kafka 架构深入解析
  • Kafka 副本一致性深入理解|LEO,ISR,HW ,leader epoch
  • 高吞吐设计:Kafka 高吞吐架设计在服务端是如何体现的?

作者介绍

在职基础架构架构师
专注于架构设计,中间件,数据库,操作系统等。持续技术输出,个人微信chysean417,欢迎交流

作者其他课程

Netty 网络编程之道 - 掘金小册课程推荐/分享/优惠/折扣
Netty 网络编程之道
Netty+互联网协议+Java NIO,搞定 Java 网络通信
肖恩架构
687人已学习
优惠价¥39.9
官网优惠购买

推荐

Webpack5 核心原理与应用实践 - 掘金小册课程推荐/分享/优惠/折扣
Webpack5 核心原理与应用实践
由浅入深,从场景化工程搭建技巧;到构建与应用性能优化技巧;再到 Loader、Plugin 组件开发;最终落地到源码级剖析 Webpack 执行原理。
范文杰
5292人已学习
优惠价¥59.9
官网优惠购买
区块链开发入门:从 0 到 1 构建基于以太坊智能合约的 ICO DApp - 掘金小册课程推荐/分享/优惠/折扣
区块链开发入门:从 0 到 1 构建基于以太坊智能合约的 ICO DApp
写给前端开发者的第一本区块链开发入门指南,通过 DApp 开发实战(基于以太坊创始人 V 神的 DAICO 设计思想),深入掌握区块链及以太坊技术
王仕军
2058人已学习
优惠价¥69
官网优惠购买
SpringBoot 中间件设计和开发 - 掘金小册课程推荐/分享/优惠/折扣
SpringBoot 中间件设计和开发
代理反射、扰动函数、字节码插桩、类代理注册,把技术与场景结合学习中间件开发技术!
小傅哥
3918人已学习
优惠价¥29.9
官网优惠购买
Vue 项目构建与开发入门 - 掘金小册课程推荐/分享/优惠/折扣
Vue 项目构建与开发入门
从构建到开发,帮助 Vue 开发者提升项目构建与开发能力,基于 Vue CLI 3
劳卜
6634人已学习
优惠价¥9.9
官网优惠购买
Hello,分布式锁 - 掘金小册课程推荐/分享/优惠/折扣
Hello,分布式锁
授人以鱼不如授人以渔,本小册从0到1采取图文结合的方式带你彻底掌握分布式锁的设计思想以及核心源码。思想永远大于源码,本小册通过推导式先讲解思想,再带着思想深入到源码。
编程界的小學生
1877人已学习
优惠价¥29.9
官网优惠购买
Go 语言原理与实践 - 掘金小册课程推荐/分享/优惠/折扣
Go 语言原理与实践
4 位字节跳动研发工程师,带你快速掌握 Go 语言实践精髓
掘金小册
1199人已学习
优惠价¥69
官网优惠购买