欢迎你们关注 github.com/hsfxuebao/j… ,但愿对你们有所帮助,要是以为能够的话麻烦给点一下Star哈java
《01 Kafka源码深度剖析-前言》git
《02 Kafka源码深度剖析-源码阅读环境搭建》github
《03 Kafka源码深度剖析-源码分析思路》编程
《04 Kafka源码深度剖析-从一个demo开始》markdown
《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源码深度剖析-生产者源码精华总结》
超高并发的网络架构设计:
(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的性能。若是咱们本身去设计一个系统,这样设计思路也是值得你们去学习的。