当前位置: 首页 > news >正文

kafka生产者源码精华总结

kafka的源码阅读起来思路很清晰,命名也很规范。

KafkaProducer值得学习的地方:

  1. Kafka的网络部分的设计绝对是一个亮点,Kafka基于NIO封装了一套自己的网络架构,支持一个客户端与多个Broker建立连接。
  2. 处理拆包和粘包的思路和代码,绝对是教科书级别的,大家可以把代码复制粘贴下来直接用到自己的线上项目去。
  3. RecordAccumulator封装消息的batchs,使用的自己封装的数据结构CopyOnWriteMap,采用读写分离的思想,用来面对高并发的场景(读多、写少),提升整个流程的性能。
  4. 封装消息的时候时候涉及的内存缓冲池,这极大地减少了GC的次数。(我们java项目,最怕最怕的就是GC,java项目60%的问题都是GC引起的)
  5. RecordAccumulator封装批次采用的是分段加锁思想,极大地提高了性能,看得出来作者确实编程功底很深厚。可以不用加锁的地方就不加锁,只在必须加锁的地方加锁。尽可能地去提升代码的性能,或者说是减少锁的使用。因为一旦使用锁,就可能出现死锁或者锁竞争。
  6. kafka的异常体系也是设计得比较清晰,在核心流程捕获异常,底层抛异常。
  7. 生产者去发送数据的时候,提供了两个方案:1)同步发送,性能会差  2)异步发送,里面结合回调函数,很大地提升了kafka的性能。

我们自己去设计一个系统的时候,可以借鉴以上思路。

from 洱海老师

源码:01-源码阅读准备之基础知识准备_哔哩哔哩_bilibili

深入浅出:Kafka 深入浅出_哔哩哔哩_bilibili

http://www.lryc.cn/news/214139.html

相关文章:

  • 边界缩小维护最值——倒序枚举/中部切开:1101T2
  • vue实现购物车案例
  • 工业4G路由器桥接多网络,提升工业环境网络覆盖
  • docker 存储目录迁移
  • Yolo-Z:改进的YOLOv5用于小目标检测
  • 系列八、Spring IOC有哪些扩展点,在什么时候调用
  • 《AI时代架构师修炼之道:ChatGPT让架构师插上翅膀》
  • git命令清单
  • 使用Nokogiri和OpenURI库进行HTTP爬虫
  • arcpy.message实现探索
  • centos卸载自带的Python3.6.8 安装指定的版本号
  • 《TCP/IP详解 卷一:协议》第5章的IPv4数据报的IHL字段解释
  • 想去银行的背完这些软件测试面试题,你就稳了...
  • 目标检测(Object Detection): 你需要知道的一些概念
  • 〔001〕虚幻 UE5 发送 get、post 请求、读取 json 文件
  • 一条 SQL 是如何在 MyBatis 中执行的
  • 《低代码指南》——维格云机器人常见报错怎么解决?
  • 哈夫曼树c语言版
  • 食堂系统登录报错
  • uniapp原生插件之乐橙摄像机播放插件(子账号云台对讲版)
  • Http代理与socks5代理有何区别?如何选择?(一)
  • system verilog VSCode Windows 配置简述
  • Linux中的Shell编程
  • 图像特征Vol.1:计算机视觉特征度量|第二弹:【统计区域度量】
  • 将图像的锯齿状边缘变得平滑的方法
  • 【MySQL索引与优化篇】数据库设计实操(含ER模型)
  • OpenCV—自动驾驶实时道路车道检测(完整代码)
  • PostGIS轨迹分析——简化轨迹
  • 量化交易-应对市场闪崩
  • 在Vue3+ElementPlus项目中使用具有懒加载的el-tree树形控件