阅读 91

Kafka源码分析20-Producer源码总结

1.kafka中producer源码目录

《01 Kafka源码深度剖析-前言》

《02 Kafka源码深度剖析-源码阅读环境搭建》

《03 Kafka源码深度剖析-源码分析思路》

《04 Kafka源码深度剖析-从一个demo开始》

《05 Kafka源码深度剖析-Producer核心流程介绍》

《06 Kafka源码深度剖析-Producer初始化》

《07 生产者源码之Producer端元数据管理》

《08 Kafka源码深度剖析-Producer核心流程初探》

《09 Kafka源码深度剖析-KafkaProducer加载元数据》

《10 Kafka源码深度剖析-选择合适的分区》

《11 Kafka源码深度剖析-RecordAccumulator封装消息流程初探》

《12 Kafka源码深度剖析-提高性能设计的数据结构CopyOnWriteMap》

《13 Kafka源码深度剖析-把数据写入对应批次(分段加锁)》

《14 Kafka源码深度剖析-内存池设计》

《15 Kafka源码深度剖析-sender线程发送消息流程初探》

《16 Kafka源码深度剖析-batch发送的条件》

《17 Kafka源码深度剖析-筛选可以发送消息的Broker》

《18 Kafka源码深度剖析-Kafka网络设计》

《19 Kafka源码深度剖析-网络没有建立KafkaProducer会发送消息吗》

《20 Kafka源码深度剖析-KafkaProducer终于与Broker建立上连接了》

《21 Kafka源码深度剖析-KafkaProducer终于发送请求了》

《22 Kafka源码深度剖析-KafkaProducer处理粘包问题的完美方案》

《23 Kafka源码深度剖析-KafkaProducer处理拆包问题的教科书代码》

《24 Kafka源码深度剖析-KafkaProducer是如何处理暂存状态的响应消息的》

《25 Kafka源码深度剖析-KafkaProducer最终如何处理响应》

《26 Kafka源码深度剖析-响应被处理了以后内存是如何处理的?》

《27 Kafka源码深度剖析-消息有异常是如何处理的?》

《28 Kafka源码深度剖析-消息发送超时了是如何处理的?》

《29 Kafka源码深度剖析-请求长时间没响应如何处理》

《30 Kafka源码深度剖析-生产者源码精华总结》

超高并发的网络架构设计:

2.总结:

(1)Kafka的网络部分的设计绝对是一个亮点,Kafka自己基于NIO封装了一套自己的网络框架,支持一个客户端与多个Broker建立连接。

(2)处理拆包和粘包的的思路和代码,绝对是教科书级别的,大家可以把代码复制粘贴下来直接用到自己的线上的项目去。

(3)RecordAccumulator封装消息的batchs,使用的自己封装的数据结构CopyOnWriteMap,采用读写分离的思想,用来面对高并发的场景(读多,写少) 提升整个流程的性能。

(4)同时封装消息的时候设计的内存缓冲池,这极大的减少了GC的次数。我们java的项目,最怕最怕的就是GCjava项目60%的问题都是GC引起的。

(5)如果大家还记得RecordAccumulator封装批次时候的代码的话,里面封装批次的时候代码采用的是分段加锁的思想,极大的提高了性能,看得出来作者确实编程功底很深厚。可以不用加锁的地方,就不加锁,只在必须加锁的地方加锁。尽可能的去提升代码的性能,或者说是减少锁的使用的。因为一旦我们在代码里面使用了锁以后:1. 死锁2. 锁争用

(6)其实我个人感觉Kafka的异常体系也是设计得比较清晰的,在核心流程捕获异常,底层抛异常。如果编程经验少一些的同学可以学习借鉴一下。

(7) 生产者去发送数据的时候提供了两个方案:1. 同步发送:性能会差2. 异步发送:里面结合回调函数,很大的提升了kafka的性能。如果我们自己去设计一个系统,这样设计思路也是值得大家去学习的。


作者:hsfxuebao
链接:https://juejin.cn/post/7019568965529649166

文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐