kafka源码_Kafka源码深度剖析系列(二十九)——生产者源码精华总结

87d026d4c8e0f0a53d5f5b52e7e1592f.png 如果看到这儿说明大家已经跟着我阅读完了Kafka的Producer端的代码了,那么恭喜你,如果你搞定了这部分代码,再阅读后面的源码难度就很小了。 我不止在一个地方说过Kafka的源码是写得比较不错的,比HDFS的源码要好得多,如果看过HDFS源码的同学就会发现,光是面向对象编程,HDFS源码那儿就做得不够好,HDFS的源码看起来就是比较乱,而Kafka这儿的源码大家跟我阅读下来一定能有这样的感受,清晰!这得益于Kafka作者高超的编程功底。 看完以后我们总结一下KafkaProducer这儿哪些地方值得我们学习: (1)Kafka的网络部分的设计绝对是一个亮点,Kafka自己基于NIO封装了一套自己的网络框架,支持一个客户端与多个Broker建立连接。 (2)处理拆包和粘包的的思路和代码,绝对是教科书级别的,大家可以把代码复制粘贴下来直接用到自己的线上的项目去。 (3)RecordAccumulator封装消息的batchs,使用的自己封装的数据结构CopyOnWriteMap,采用读写分离的思想,提提供了性能。 (4)同时封装消息的时候设计的内存缓冲池,这极大的减少了GC的次数。 (5)如果大家还记得RecordAccumulator封装批次时候的代码的话,里面封装批次的时候代码采用的是分段加锁的思想,极大的提高了性能,看得出来作者确实编程功底很深厚。 (6)其实我个人感觉Kafka的异常体系也是设计得比较清晰的,在核心流程捕获异常,底层抛异常。如果编程经验少一些的同学可以学习借鉴一下。 (7)相比HDFS,Kafka里面向对象的封装思想用得很好。比如在HDFS的源码我们随处可以见到一个方法,传进去的参数有十多个参数,而这个在Kafka里是看不到的,Kafka肯定是把封装了成一个对象传递进去。 HDFS里随处可以见到几百行代码的方法,这个在Kafka里也是看不到的。 Kafka一些小的地方也是处理得很好,真的看到这样代码真是令人感动:比如就是封装一个简单的线程,kafka作者都把跟业务代码隔离出来,使人看了以后感觉很清晰。 c68ee74f5a7468eae6dc9e44bdbeda44.png -   关注“大数据观止”   -

a93fa7f68af048285b646212e117879b.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值