kafka生产者源码精华总结
kafka的源码阅读起来思路很清晰,命名也很规范。
KafkaProducer值得学习的地方:
- Kafka的网络部分的设计绝对是一个亮点,Kafka基于NIO封装了一套自己的网络架构,支持一个客户端与多个Broker建立连接。
- 处理拆包和粘包的思路和代码,绝对是教科书级别的,大家可以把代码复制粘贴下来直接用到自己的线上项目去。
- RecordAccumulator封装消息的batchs,使用的自己封装的数据结构CopyOnWriteMap,采用读写分离的思想,用来面对高并发的场景(读多、写少),提升整个流程的性能。
- 封装消息的时候时候涉及的内存缓冲池,这极大地减少了GC的次数。(我们java项目,最怕最怕的就是GC,java项目60%的问题都是GC引起的)
- RecordAccumulator封装批次采用的是分段加锁思想,极大地提高了性能,看得出来作者确实编程功底很深厚。可以不用加锁的地方就不加锁,只在必须加锁的地方加锁。尽可能地去提升代码的性能,或者说是减少锁的使用。因为一旦使用锁,就可能出现死锁或者锁竞争。
- kafka的异常体系也是设计得比较清晰,在核心流程捕获异常,底层抛异常。
- 生产者去发送数据的时候,提供了两个方案:1)同步发送,性能会差 2)异步发送,里面结合回调函数,很大地提升了kafka的性能。
我们自己去设计一个系统的时候,可以借鉴以上思路。
from 洱海老师
源码:01-源码阅读准备之基础知识准备_哔哩哔哩_bilibili
深入浅出:Kafka 深入浅出_哔哩哔哩_bilibili
相关文章:
kafka生产者源码精华总结
kafka的源码阅读起来思路很清晰,命名也很规范。 KafkaProducer值得学习的地方: Kafka的网络部分的设计绝对是一个亮点,Kafka基于NIO封装了一套自己的网络架构,支持一个客户端与多个Broker建立连接。处理拆包和粘包的思路和代码&…...
边界缩小维护最值——倒序枚举/中部切开:1101T2
http://cplusoj.com/d/senior/p/CPNOIPB 发现维护边界缩小类最值很难做,有两种常见方法: 倒序进行,边界就变成扩大了在 m i d mid mid 处切开,复杂度可以均摊...
vue实现购物车案例
要求 可以进行购物车水果删除可以进行水果数量增减可以进行总价计算、购物车商品计算选中所有水果也会一同勾选全选框,全选框勾选也能选中所有水果可以记录购物车状态,当页面关闭后重新打开可以看到原先的购物车数据 功能代码 <!DOCTYPE html>…...
工业4G路由器桥接多网络,提升工业环境网络覆盖
一款专为工业环境应用所设计的物联网通讯设备“工业4G路由器”,它具有多种功能和特性。其中之一就是桥接功能,在工业领域中被广泛应用并起着重要的通信作用。 桥接功能是指工业4G路由器通过无线网络的方式,为不同的工业设备提供网络并将其连…...
docker 存储目录迁移
参考:【Docker专题】WSL镜像包盘符迁移详细笔记 - 掘金 docker迁移 一 默认目录 Windows版本(Windows 10 wsl 2)docker 默认程序安装到c盘,数据存放于 C:\Users\当前用户名\AppData\Local\Docker\wsl\data\ext4.vhdx 这样会导致…...
Yolo-Z:改进的YOLOv5用于小目标检测
目录 一、前言 二、背景 三、新思路 四、实验分析 论文地址:2112.11798.pdf (arxiv.org) 一、前言 随着自动驾驶汽车和自动驾驶赛车越来越受欢迎,对更快、更准确的检测器的需求也在增加。 虽然我们的肉眼几乎可以立即提取上下文信息,即…...
系列八、Spring IOC有哪些扩展点,在什么时候调用
一、概述 Spring IOC的扩展点是指IOC在加载过程中,如何对即将要创建的bean进行扩展。 二、扩展点 2.1、实现BeanDefinitionRegistryPostProcessor 调用invokeBeanFactoryPostProcessors时,通过实现BeanDefinitionRegistryPostProcessor接口进行扩展。 …...
《AI时代架构师修炼之道:ChatGPT让架构师插上翅膀》
本专注于帮助架构师在AI时代 实现晋级、提高效率的图书 书中介绍了如何使用 ChatGPT 来完成架构设计的各个环节 并通过实战案例展示了ChatGPT在实际架构设计中的应用方法 关键点 1.架构设计新模式:让架构设计更高效、更快捷、更完美。 2.全流程解析:涵盖…...
git命令清单
一、设置和配置 1.初始化一个新的仓库: git init2.克隆(Clone)一个远程仓库到本地: git clone <repository_url>3.配置用户信息: git config --global user.name "Your Name" git config --global…...
使用Nokogiri和OpenURI库进行HTTP爬虫
目录 一、Nokogiri库 二、OpenURI库 三、结合Nokogiri和OpenURI进行爬虫编程 四、高级爬虫编程 1、并发爬取 2、错误处理和异常处理 3、深度爬取 总结 在当今的数字化时代,网络爬虫已经成为收集和处理大量信息的重要工具。其中,Nokogiri和OpenUR…...
arcpy.message实现探索
arcpy 位置D:\Program Files\GeoScene\Pro\Resources\ArcPy\arcpy\__init__.py ”““AddMessage(消息) 创建可以使用任何GetMessages函数访问的地理处理信息消息(Severity0)。 message(字符串):要添加的消息。”“ arcpy.geoprocessing D:\Program Files\GeoScene\Pro\Re…...
centos卸载自带的Python3.6.8 安装指定的版本号
#卸载python3 rpm -qa|grep python3|xargs rpm -ev --allmatches --nodeps #删除所有残余文件 whereis python3 |xargs rm -frv#查看现有安装的python,验证是否删除干净 whereis python # 安装依赖 yum -y install zlib-devel bzip2-devel openssl-devel ncurses-de…...
《TCP/IP详解 卷一:协议》第5章的IPv4数据报的IHL字段解释
首先说明一下,这里并不解释整个IPv4数据报各个字段的含义,仅仅针对IHL字段作解释。 我们先看下IPv4数据报格式 对于IHL字段, 《TCP/IP详解 卷一:协议》这么解释: IPv4数据报。头部大小可变,4位的IHL字段…...
想去银行的背完这些软件测试面试题,你就稳了...
前言 最近呢有很多的小伙伴问我有没有什么软件测试的面试题,由于我之前一直在忙工作上的事情,没有时间整理面试题,刚好最近休息了一下,顺便整理了一些面试题,现在就把整理的面试题分享给大家,废话就不多说…...
目标检测(Object Detection): 你需要知道的一些概念
文章目录 NMS 非极大值抑制目的步骤 mAP(Mean Average Precision)步骤 Feature Pyramid Network 特征金字塔结构一阶段检测器Single-Stage Detectors"Anchor-based"的代表RetinaNetAnchor-free 的代表FCOS NMS 非极大值抑制 目的 去除网络输…...
〔001〕虚幻 UE5 发送 get、post 请求、读取 json 文件
✨ 目录 🎈 安装 varest 扩展🎈 开启 varest 扩展🎈 发送 get 请求🎈 发送 post 请求🎈 读取 json 文件🎈 安装 varest 扩展 打开 虚幻商城,搜索 varest 关键字进行检索, varest 是一个 api 调用插件,支持 http/https 请求,也支持 json 文件的读取,最关键是该…...
一条 SQL 是如何在 MyBatis 中执行的
前言 MyBatis 执行 SQL 的核心接口为 SqlSession 接口,该接口提供了一些 CURD 及控制事务的方法,另外还可以通过 SqlSession 先获取 Mapper 接口的实例,然后通过 Mapper 接口执行 SQL,Mapper 接口方法的执行最终还是委托到 SqlSe…...
《低代码指南》——维格云机器人常见报错怎么解决?
在使用维格机器人调用维格表的API过程中,可能会出现机器人执行结果未达到预期的情况,此时可能是机器人运行出现了问题;通过点击这个机器人右上角的“运行历史”可以查看运行记录,通过对运行记录的分析,可以推断出问题所在,然后进行修改。 而对于运行历史的分析,主要是针…...
哈夫曼树c语言版
一、哈夫曼树概念 哈夫曼树又称最优树给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大…...
食堂系统登录报错
因为数据库没有任何用户数据,所以会报错,需要添加admin用户 D:\env\jdk1.8.0_341\bin\java.exe -XX:TieredStopAtLevel1 -noverify -Dspring.output.ansi.enabledalways -Dcom.sun.management.jmxremote -Dspring.jmx.enabledtrue -Dspring.liveBeansVie…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...
Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...
ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...
go 里面的指针
指针 在 Go 中,指针(pointer)是一个变量的内存地址,就像 C 语言那样: a : 10 p : &a // p 是一个指向 a 的指针 fmt.Println(*p) // 输出 10,通过指针解引用• &a 表示获取变量 a 的地址 p 表示…...
