最新公告
  • 自助下单 自动发货 58学课 欢迎您【客服QQ:260837161】
  • 掘金小册Kafka 原理与源码精讲

    • 在线网盘 点击查看详情 购买后内容一样

    你能学到什么

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

    作者介绍

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

    小册介绍

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

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

    但是,很少能有一种中间件能把这些领域全部都包含进来,但是消息队列就是一个。如果要评价一个消息队列是否是有是否是优秀的,那么就要看它在网络通信,存储,分布式上的实现是否优秀。毫无疑问,KAFKA 在所以消息队列里是最优秀的,最有设计感的消息队列系统。把 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. 大幅提高你的代码能力。 下图是主线程并发向缓冲区填充消息的示意图: image.png

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

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

    我们这节课的特点:

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

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

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

    免费视频讲解

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

    space.bilibili.com/391958110

    视频免费试看

    生产者如何获取元数据?www.bilibili.com/video/BV1ZT…

    消息在缓冲区是如何存储的?www.bilibili.com/video/BV1cZ…

    客户端网络通信如何实现的?www.bilibili.com/video/BV1eR…

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

    适宜人群

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

    常见问题FAQ

    如何下单?如何下载?
    ->> 点击查看 自助下单,自动发货,下单后,页面会自动刷新,显示百度网盘地址
    如何查看下单后的内容?
    在线网盘 点击查看详情 下单后内容一样
    本站不议价 !
    本站不议价,不支持无理由退换,看清楚再下单
    更多常见问题?
    ->> 点击查看

    发表回复

    Hi, 如果你对这个资源有疑问,可以跟我联系哦!

    联系客服
    • 13203会员总数(位)
    • 5258资源总数(个)
    • 75本周发布(个)
    • 1 今日发布(个)
    • 1509稳定运行(天)

    自助下单 自动发货 58学课 欢迎您

    加入我们