Kafka 核心源码解读
胡夕
Apache Kafka Committer,老虎证券技术总监
19216 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 44 讲
结束语 (1讲)
Kafka 核心源码解读
15
15
1.0x
00:00/00:00
登录|注册

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

你好,我是胡夕。《Kafka 核心源码解读》课到今天就告一段落了,又到了和你说再见的时候。
当初接下这个任务时,我记得小编和我说,咱们这个课程将会是极客时间的第一个源码类的专栏课,我顿时觉得既自豪又忐忑。
自豪的是,我能够作为首个源码专栏课作者,给你分享 Kafka 源码的学习心得;忐忑的是,源码并不好讲,如果讲解的粒度太粗,就会流于表面,不够深入,而粒度太细的话,就很容易陷入流水账似的代码走读,这其中的度,需要仔细拿捏才行。
不过,我依然还是愿意试一试。
因为我始终觉得,现在的编程教育对于阅读源码的重视程度远远不足。一直以来,学校或各类培训机构只看重编程技能的灌输,而忽略了带领大家一同学习业界流行框架的源码编写方法,但这恰恰是非常关键的。如果你没有阅读过大量质量上乘的代码,那么,你就不可能写出优秀的代码。
就像美国作家斯蒂芬·金所说:“If you don’t have time to read, you don’t have the time (or the tools) to write. Simple as that.” 虽然这句话是关于写作的,但是对于我们写代码来说,同样也是适用的。学习比自己更有经验的人写出的源码,一定会直接或间接地影响你自己的编码水平。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

源码学习是一场漫长的登山之旅,需要耐心和毅力。《Kafka核心源码解读》课程的结束并不意味着学习的终结,而是一个新的起点。作者胡夕分享了自己对Kafka源码学习的经验和建议,强调了阅读源码对于提升编码水平的重要性。他建议读者继续深入学习Kafka源码,包括研读Kafka Clients端的代码、学习测试用例代码以及阅读Log Cleaner组件的代码。此外,作者还提出了阅读源码的方法,包括初步了解代码结构、多次重复阅读以及亲自动手修改源码等。最后,作者鼓励读者不要恐惧,勇敢地面对源码学习的挑战。这篇文章为读者提供了深入学习Kafka源码的指导和鼓励,帮助他们更好地应对源码学习的挑战。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Kafka 核心源码解读》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(9)

  • 最新
  • 精选
  • Roger宇
    胡老师。有个问题我实在是没有办法了,但探索欲折磨我想知道答案,还希望老师能帮帮我。关于kafka消息的有序性,我们都知道同一个分区内可以保证消息的有序性。但我百度谷歌遍了网上也找不到任何人可以解释为什么kafka能做到这一点。我从LogSegment找到Log,再到MemoryRecords到MemoryRecordsBuilder然后到RecordBatch再到RecordsAccumulator。尽管log.append和MemoryRecordsBuilder.append等方法确实加锁了。但这只能保证某一个生产者发送到单一分区的消息集合是顺序的。如果是多个producer想一个topic发送呢?不同的producer发到相同分区的数据,他们之间如何保证有序呢?这点我始终找不到确信的答案。我甚至怀疑过顺序是在消费端保证的,但消费者的poll方法根本没有机会查到任何端倪,并且这样的设计也并不高效。我也怀疑过这个顺序是否和索引有关,但索引的entry是疏松的,即并不是对每条消息都有索引记录,那不同消息集合内部的数据如果不是顺序的,索引又如何能解决呢?

    作者回复: 网上搜不到因为它压根就不是由Kafka保证的, 而是由操作系统的页缓存机制来保存的。

    2020-07-18
    5
    4
  • Ball
    一刷完结撒花🎉。 第一遍粗读我大概了解一下 Kafka 内部机制和原理,现在二刷就得自己读源码和做实验去深入理解和加深印象了。 我们开头见!

    作者回复: 加油:)

    2020-11-19
    2
  • momo
    胡老师好,公司想搭kafka集群,内存和磁盘应该如何估算。谢谢!内存是看topic数量,多少个partition,相乘再相估算多少数据在内存。觉得不够明白,麻烦老师讲下,谢谢!

    作者回复: 内存我觉得只要是一般的配置都是够用的。磁盘的多少看咱们总的消息体量有多大。

    2020-11-09
  • 言希
    胡老师好,我最近在做Kafka性能测试,单块HDD盘,10Topic,10Partition,10个生产者 + 10个消费者;生产的速度会被压的很低,只有7k左右,消费速度很高;再往后50Topic , 10Partition,生产速度会一直被挤压到2k左右,生产者出现大量超时,处于完全不可用状态。这时候磁盘使用率一直是 100% ,请问老师有没有什么办法可以给消费者限流,保证生产速度和消费速度差不多,不至于相差很悬殊,导致生产数据丢失 ? 还有一点就是源码中没有看到优先保证消费请求的逻辑,为什么测试的时候发现,生产者消费者组相同的条件下,有堆积,都是消费速度很高,生产速度很低呢 ? 老师有时间帮忙解惑下,万分感谢。

    作者回复: 这里面可能的因素太多了。所以最好能说得详细些。比如用了什么版本做的测试,broker、producer和consumer配置怎么样。我好奇的是,如果consumer消费速度大于producer,那么大部分数据应该都是从页缓存读取,100%的磁盘空间到底是被谁占用的,这个值得进一步的分析。另外,源码处理读取消息和写入消息都是独立的逻辑,没有所谓的优先级之分。还是需要更多的信息才能做进一步的诊断。

    2020-08-19
  • 伯安知心
    胡老师,以后还会有课程吗?期待~

    作者回复: 嗯,暂时没有了~

    2020-07-19
  • 陪你去砍刘星宇
    胡老师您好,感谢您的课程,我到了很多。请问是否有机会再开一门课程讲讲connect,谢谢老师。
    2020-07-21
    3
  • 后视镜
    感谢,老师的kafka水平令我折服
    2022-03-28
  • lucas
    老师,请教一个问题 2021-12-09 20:43:46,031 WARN org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumerBase [] - Consumer subtask 5 failed async Kafka commit. org.apache.kafka.clients.consumer.RetriableCommitFailedException: Offset commit failed with a retriable exception. You should retry committing the latest consumed offsets. Caused by: org.apache.kafka.common.errors.CoordinatorNotAvailableException: The coordinator is not available. 这个是什么问题 我发现fkink消费kafka,某些分区突然提交不上去offset了
    2021-12-13
  • 伯安知心
    👍感谢~
    2020-07-18
收起评论
显示
设置
留言
9
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部