欢迎大家关注 github.com/hsfxuebao/j… ,希望对大家有所帮助,要是觉得可以的话麻烦给点一下Star哈
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的性能。如果我们自己去设计一个系统,这样设计思路也是值得大家去学习的。