Kafka日志数据深度解析:从基础查看到高级操作全攻略
#作者:孙德新
文章目录
- 查看log日志文件(kafka-dump-log.sh)
- 1、查看Log文件基本数据信息
- 2、index文件健康性检查(--index-sanity-check)
- 3、转储文件(--max-message-size)
- 4、偏移量解码(--offsets-decoder)
- 5、日志数据解析(--transaction-log-decoder)
- 6、查询Log文件具体数据(--print-data-log)
- 7、查看index文件具体内容
- 8、查看timeindex文件具体内容
- 9、验证日志文件
- 10、使用kafka-run-class.sh查看log、index、timeindex数据
查看log日志文件(kafka-dump-log.sh)
kafka转储日志工具可用于调试集群元数据目录的日志段和快照。该工具将扫描提供的文件并解码元数据记录。
参数:
–deep-iteration
–files <String: file1, file2, …> 必需; 读取的日志文件 ,例如 --files 0000009000.log
–index-sanity-check sanity中文健全性。用于检查日志索引文件的健康状况,确保它们的元数据是有效的,并且能正确地指向消息的物理位置。
–key-decoder-class 指定一个自定义的解码器类来解码消息键,用于反序列化键。这类应实现kafka.serializer。解码器特性。自定义jar应该是在kafka/libs目录中提供。
–max-message-size 用于指定最大消息大小,超过这个大小的消息会被视为无效消息并被忽略。默认:5242880 。
–offsets-decoder 用于指定消息的偏移量解码器,通常用于在控制台打印出消息的偏移量。日志数据解析为来自__consumer_offsets主题的偏移量数据。
–print-data-log 打印真正业务数据内容
–transaction-log-decoder 日志数据解析为来自__transaction_state主题的事务元数据
–value-decoder-class [String] 用于指定一个自定义的值解码器类,当你需要以特定格式(如压缩或加密)读取Kafka中的消息值时,可能需要提供一个自定义的解码器。用于反序列化消息。这个类应该实现kafka。序列化程序。解码器特性。自定义jar应该在kafka/libs目录中可用。(默认值:kafka.serializer.StringDecoder)
–verify-index-only 验证日志文件的索引的一个脚本。这个参数的使用意味着你只想验证日志文件的索引,而不是转储或者打印出日志文件的内容。这通常用于确保日志文件的索引是有效的,也可以用来检查日志文件是否损坏。只需验证索引日志,而不打印其内容。
–version 查询kafka版本
1、查看Log文件基本数据信息
kafka-dump-log.sh
–files <String: file1, file2, …>:要转储的数据和索引日志文件列表,用逗号分隔。(必须)
–print-data-log:如果设置,转储数据日志时打印消息内容。如果指定了任何解码器选项,则自动设置。
#在Kafka 2.0.0之前使用
128 ~]# kafka-run-class.sh kafka.tools.DumpLogSegments --files
~]# ./kafka-run-class.sh kafka.tools.DumpLogSegments --files /tmp/kafka/log/topic-log-3/00000000000000000000.log --print-data-log#从Kafka 2.0.0开始使用
~]# ./kafka-dump-log.sh --files /tmp/kafka/log/topic-log-0/00000000000000000000.log
~]# ./kafka-dump-log.sh --files /tmp/kafka/log/topic-log-0/00000000000000000000.log --print-data-log
具体案例如下:
~]# ./kafka-dump-log.sh --files /tmp/kafka-logs/testTopic-0/00000000000000000000.log
baseOffset: 1044628 lastOffset: 1044676 count: 49 baseSequence: -1 lastSequence: -1 producerId: -1 producerEpoch: -1 partitionLeaderEpoch: 0 isTransactional: false isControl: false position: 27083143 CreateTime: 1691300649226 size: 1139 magic: 2 compresscodec: none crc: 2048338167 isvalid: truebaseOffset: 1044677 lastOffset: 1044773 count: 97 baseSequence: -1 lastSequence: -1 producerId: -1 producerEpoch: -1 partitionLeaderEpoch: 0 isTransactional: false isControl: false position: 27084282 CreateTime: 1691300649228 size: 2228 magic: 2 compresscodec: none crc: 1293136921 isvalid: true
上面每条消息都表示的是batchRecord
baseOffset为起始位置,lastOffset为终止位置,count为本次消息数量。
2、index文件健康性检查(–index-sanity-check)
本参数可以查看、检查log、index、timeindex文件。其中log只能查看数据。
~]# ./kafka-dump-log.sh --index-sanity-check --files /data1/kafka/zglt-0/00000000000000000000.index
Dumping /data1/kafka/zglt-0/00000000000000000000.index
/data1/kafka/zglt-0/00000000000000000000.index passed sanity check.
~]# ./kafka-dump-log.sh --index-sanity-check --files /data1/kafka/zglt-0/00000000000000000000.log
Dumping /data1/kafka/zglt-0/00000000000000000000.log
Starting offset: 0
~]# ./kafka-dump-log.sh --index-sanity-check --files /data1/kafka/zglt-0/00000000000000000000.timeindex
Dumping /data1/kafka/zglt-0/00000000000000000000.timeindex
/data1/kafka/zglt-0/00000000000000000000.timeindex passed sanity check.
3、转储文件(–max-message-size)
转储大小限制为1MB的日志文件 /var/log/kafka/log-0:
kafka-dump-log.sh --max-message-size 1048576 --files /var/log/kafka/log-0
4、偏移量解码(–offsets-decoder)
偏移量验证:当怀疑消费者的偏移量不正确时,可以通过 --offsets-decoder 来验证实际存储在日志中的偏移量是否与预期一致。
~]# ./kafka-dump-log.sh --offsets-decoder decoder --files /data1/kafka/aaa-0/00000000000000000013.log
Dumping /data1/kafka/aaa-0/00000000000000000013.log
Starting offset: 13
5、日志数据解析(–transaction-log-decoder)
解析log、index等文件
~]# ./kafka-dump-log.sh --transaction-log-decoder --files /data1/kafka/aaa-0/00000000000000000013.log
Dumping /data1/kafka/aaa-0/00000000000000000013.log
Starting offset: 13
6、查询Log文件具体数据(–print-data-log)
]# ./kafka-dump-log.sh --files /data1/aaa-1/00000000000000000001.snapshot --print-data-log
Dumping /data1/kafka/aaa-1/00000000000000000001.snapshotkafka-dump-log.sh --files /tmp/kafka-logs/testTopic-0/00000000000000000000.log --print-data-log
下面为每条消息的具体信息:
| offset: 399407 CreateTime: 1691292274339 keySize: 4 valueSize: 14 sequence: -1 headerKeys: [] key: 0 payload: Message_399408
| offset: 399408 CreateTime: 1691292274339 keySize: 4 valueSize: 14 sequence: -1 headerKeys: [] key: 1 payload: Message_399409
| offset: 399409 CreateTime: 1691292274339 keySize: 4 valueSize: 14 sequence: -1 headerKeys: [] key: 2 payload: Message_399410
| offset: 399410 CreateTime: 1691292274339 keySize: 4 valueSize: 14 sequence: -1 headerKeys: [] key: 3 payload: Message_399411
| offset: 399411 CreateTime: 1691292274339 keySize: 4 valueSize: 14 sequence: -1 headerKeys: [] key: 4 payload: Message_399412
| offset: 399412 CreateTime: 1691292274339 keySize: 4 valueSize: 14 sequence: -1 headerKeys: [] key: 5 payload: Message_399413
| offset: 399413 CreateTime: 1691292274339 keySize: 4 valueSize: 14 sequence: -1 headerKeys: [] key: 6 payload: Message_399414
| offset: 399414 CreateTime: 1691292274339 keySize: 4 valueSize: 14 sequence: -1 headerKeys: [] key: 7 payload: Message_399415
| offset: 399415 CreateTime: 1691292274339 keySize: 4 valueSize: 14 sequence: -1 headerKeys: [] key: 8 payload: Message_399416
| offset: 399416 CreateTime: 1691292274339 keySize: 4 valueSize: 14 sequence: -1 headerKeys: [] key: 9 payload: Message_399417
案例二:一条批消息(Record Batch)日志记录,包含多条的实际数据
offset表示该分区的记录偏移量,指的是第几条记录
baseOffset:基准偏移量(每条消息的开始),即批消息中第一条记录的偏移量。用来表示当前Segment中第一条消息的offset
lastOffset为批消息中最后一条记录的偏移量。每个LogSegment都有一个基准偏移量baseOffset,用来表示当前LogSegment中第一条消息的offset。偏移量是一个64位的长整型数。
Count:为批消息中包含的记录数,lastOffset - baseOffset + 1 = count
其他字段有些没有用到,所以显示-1,有些暂时也不清楚
position表该记录在当前片段文件的文件偏移量。即批消息的起始位置(应是物理地址),每个log文件中position都从0开始
CreateTime记录创建的时间,在批消息中为批消息中最后一条记录的创建时间,在记录中为记录的创建时间
size为批消息的大小,从内容可以看出,前一条批消息的position,加上前一条消息的size,结果为后一条消息的position
isValid记录是否有效
keysize表示key的长度,如果为-1,则表示没有设置key,即key=null
valuesize表示一条记录value的长度。实际消息体的长度。如果为-1,则表示消息为空。
magic表示本次发布kafka服务程序协议的版本号。即消息格式的版本号,对v2版本而言,magic等于2,是固定值。
compresscodec压缩工具
sequence消息的序列号
payload表示具体的消息
每个LogSegment都有一个基准偏移量baseOffset,用来表示当前LogSegment中第一条消息的offset。偏移量是一个64位的长整型数。
日志文件和两个索引文件都是根据基准偏移量(baseOffst)命名的,名称固定为20位数字,没有达到的位数则用0填充。
比如第1个LogSegment的日志文件名是00000000000000000000.log,因此它的基准偏移量是0。
比如第2个LogSegment的日志文件名是00000000000000000133.log,因此它的基准偏移量是133,也说明了该LogSegment中的第一条消息的偏移量为133,同时可以反映出第一个LogSegment中共有133条消息(偏移量从0至132的消息)。
]# /usr/local/kafka_2.13-2.7.1/bin/kafka-dump-log.sh --files /data1/kafka/aaa-0/00000000000000000000.log --print-data-log
Dumping /data1/kafka/aaa-0/00000000000000000000.log
Starting offset: 0
baseOffset: 0 lastOffset: 0 count: 1 baseSequence: -1 lastSequence: -1 producerId: -1 producerEpoch: -1 partitionLeaderEpoch: 2 isTransactional: false isControl: false position: 0 CreateTime: 1718268803238 size: 200 magic: 2 compresscodec: NONE crc: 710512664 isvalid: true
| offset: 0 CreateTime: 1718268803238 keysize: -1 valuesize: 130 sequence: -1 headerKeys: [] payload: ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ]# /usr/local/kafka_2.13-2.7.1/bin/kafka-dump-log.sh --files /data1/kafka/aaa-2/00000000000000000002.log --print-data-log
Dumping /data1/kafka/aaa-2/00000000000000000002.log
Starting offset: 2
baseOffset: 2 lastOffset: 2 count: 1 baseSequence: -1 lastSequence: -1 producerId: -1 producerEpoch: -1 partitionLeaderEpoch: 2 isTransactional: false isControl: false position: 0 CreateTime: 1718268782347 size: 68 magic: 2 compresscodec: NONE crc: 3743762133 isvalid: true
| offset: 2 CreateTime: 1718268782347 keysize: -1 valuesize: 0 sequence: -1 headerKeys: [] payload:
baseOffset: 3 lastOffset: 3 count: 1 baseSequence: -1 lastSequence: -1 producerId: -1 producerEpoch: -1 partitionLeaderEpoch: 2 isTransactional: false isControl: false position: 68 CreateTime: 1718290399570 size: 71 magic: 2 compresscodec: NONE crc: 2993399773 isvalid: true
| offset: 3 CreateTime: 1718290399570 keysize: -1 valuesize: 3 sequence: -1 headerKeys: [] payload: ljj
baseOffset: 4 lastOffset: 4 count: 1 baseSequence: -1 lastSequence: -1 producerId: -1 producerEpoch: -1 partitionLeaderEpoch: 2 isTransactional: false isControl: false position: 139 CreateTime: 1718290411208 size: 71 magic: 2 compresscodec: NONE crc: 1297150689 isvalid: true
| offset: 4 CreateTime: 1718290411208 keysize: -1 valuesize: 3 sequence: -1 headerKeys: [] payload: syy
baseOffset: 5 lastOffset: 5 count: 1 baseSequence: -1 lastSequence: -1 producerId: -1 producerEpoch: -1 partitionLeaderEpoch: 2 isTransactional: false isControl: false position: 210 CreateTime: 1718290425119 size: 71 magic: 2 compresscodec: NONE crc: 3308277039 isvalid: true
| offset: 5 CreateTime: 1718290425119 keysize: -1 valuesize: 3 sequence: -1 headerKeys: [] payload: 520
7、查看index文件具体内容
./bin/kafka-dump-log.sh --files /tmp/kafka-logs/testTopic-0/00000000000000000000.index
offset为索引值,position为具体位置,可以看到大概每隔600条消息,就建立一个索引。配置项为log.index.size.max.bytes,来控制创建索引的大小;
offset: 972865 position: 25163202
offset: 973495 position: 25179579
offset: 974125 position: 25195956
offset: 974755 position: 25212333
offset: 975385 position: 25228710
offset: 976015 position: 25245087
offset: 976645 position: 25261464
offset: 977275 position: 25277841
8、查看timeindex文件具体内容
./bin/kafka-dump-log.sh --files /tmp/kafka-logs/testTopic-0/00000000000000000000.timeindex
输出如下:
timestamp: 1691292274425 offset: 475709
timestamp: 1691292274426 offset: 476947
timestamp: 1691292274427 offset: 478255
timestamp: 1691292274428 offset: 479543
timestamp: 1691292274429 offset: 480848
timestamp: 1691292274430 offset: 481767
timestamp: 1691292274431 offset: 483209
timestamp: 1691292274432 offset: 484869
timestamp: 1691292274433 offset: 486408
9、验证日志文件
[root@kafka18 ~]# ./kafka-dump-log.sh --verify-index-only --files /data1/kafka/aaa-0/00000000000000000013.log
Dumping /data1/kafka/aaa-0/00000000000000000013.log
Starting offset: 13[root@kafka18 ~]# ./bin/kafka-dump-log.sh --verify-index-only --files /data1/kafka/aaa-0/00000000000000000013.index
Dumping /data1/kafka/aaa-0/00000000000000000013.index
10、使用kafka-run-class.sh查看log、index、timeindex数据
方式一:
bin]# ./kafka-run-class.sh kafka.tools.DumpLogSegments --files /data1/kafka/liantong-0/00000000000000000003.log
Dumping /data1/kafka/liantong-0/00000000000000000003.log
Starting offset: 3
baseOffset: 3 lastOffset: 3 count: 1 baseSequence: -1 lastSequence: -1 producerId: -1 producerEpoch: -1 partitionLeaderEpoch: 0 isTransactional: false isControl: false position: 0 CreateTime: 1722694779291 size: 175 magic: 2 compresscodec: NONE crc: 1931408561 isvalid: true
方式二:查看log具体数据内容
hhhh为具体真实kafka数据
]#./kafka-run-class.sh kafka.tools.DumpLogSegments --files /data1/kafka/liantong-0/00000000000000000003.log --deep-iteration --print-data-log
Dumping /data1/kafka/liantong-0/00000000000000000003.log
Starting offset: 3
baseOffset: 3 lastOffset: 3 count: 1 baseSequence: -1 lastSequence: -1 producerId: -1 producerEpoch: -1 partitionLeaderEpoch: 0 isTransactional: false isControl: false position: 0 CreateTime: 1722694779291 size: 175 magic: 2 compresscodec: NONE crc: 1931408561 isvalid: true
| offset: 3 CreateTime: 1722694779291 keysize: -1 valuesize: 105 sequence: -1 headerKeys: [] payload: hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh查看timeindex
./kafka-run-class.sh kafka.tools.DumpLogSegments --files /data1/kafka/liantong-0/00000000000000000003.timeindex --deep-iteration --print-data-log
Dumping /data1/kafka/liantong-0/00000000000000000003.timeindex
timestamp: 1722694779291 offset: 3查看index
./kafka-run-class.sh kafka.tools.DumpLogSegments --files /data1/kafka/liantong-0/00000000000000000003.index --deep-iteration --print-data-log
Dumping /data1/kafka/liantong-0/00000000000000000003.index
相关文章:
Kafka日志数据深度解析:从基础查看到高级操作全攻略
#作者:孙德新 文章目录 查看log日志文件(kafka-dump-log.sh)1、查看Log文件基本数据信息2、index文件健康性检查(--index-sanity-check)3、转储文件(--max-message-size)4、偏移量解码(--offsets-decoder)5、日志数据解析(--transaction-log-decoder)6、查询Log文件…...

DeepSeek-R1使用生存指南
文章目录 1.为什么普通人一定要使用DeepSeek2.DeepSeek的几种使用方式2.1网页端直接使用2.2手机端app使用2.3其他第三方平台 3.网页端按钮的说明4.正确的提问技巧4.1不要定义过程4.2明确受众4.3记忆时间有限4.4输出长度限制4.5如何清除上下文的记忆 5.几个避坑点5.1冗长提示词污…...

Code::Blocks 创建 C 项目 二
Code::Blocks 创建 C 项目 二 Code::Blocks 安装请看 Code::Blocks 安装 启动 Code Blocks 选择 Create a new project 弹出界面选择 Projects -> Console application -> Go 选择 C :表示创建的是 C 语言项目 点击 Next Project title:项目名 …...

pyqt写一个待办程序
ToDoApp 框架选择 一个简单的GUI程序,可以使用pyqt完成。pyqt是qt的python实现版本。 界面搭建 设计一个美观 简洁的界面 class ToDoApp(QWidget):def __init__(self):super().__init__()# 设置窗口属性self.setWindowTitle("Daily To Do List")self…...

总结前端常用数据结构 之 数组篇【JavaScript -包含常用数组方法】
【亲爱的读者,爱博主记得一键三连噢噢ooo~~ 啾咪】 创建数组: 以字面量的形式创建新数组:let arr1 [1, 2, 3];通过 Array 构造函数并传入一组元素(4,5,6)来创建一个新数组:let arr2 new Array(4, 5, 6);…...
利率掉期(Interest Rate Swap):运作原理、收益模式及市场角色解析(中英双语)
利率掉期(Interest Rate Swap):运作原理、收益模式及市场角色解析 引言 利率掉期(Interest Rate Swap, IRS) 是金融市场中最常见的衍生品之一,它允许两方交换固定利率和浮动利率,以优化融资成…...
Mac 开发工具推荐
Homebrew 软件安装管理必备神器,相当于 Linux 上的 yum,安装了homebrew之后,以下软件都可以通过brew cask install 和 brew install进行直接安装 IntelliJ IDEA Java开发ide 相关插件: 1)lombok 2)Aliba…...
NCHAR_CS和CHAR_CS,导致UNION ALL 时,提示SQL 错误 [12704] [72000]: ORA-12704: 字符集不匹配
检查涉及的数据表和列的字符集设置 -- 查询表的字符集 SELECT parameter, value FROM nls_database_parameters WHERE parameter LIKE NLS_CHARACTERSET;-- 查询列的字符集(对于特定表) SELECT column_name, character_set_name FROM all_tab_columns W…...

使用 Python paramiko 自动备份设备配置实验
一、实验拓扑: 要求:交换机 SW1 做为 SSH 服务端,桥接本地虚拟虚拟网卡;本地主机通过 python paramiko 库功能登录到 SW1 上进行配置备份;AR1 做为测试 SW1 的 SSH 客户端 二、实验环境搭建: 1、SW1 配置…...

goland2022.3.3 安装过程
到csdn下载安装包 开始安装 安装完后,安装中文包...

工业级推荐系统冷启动解决方案:基于元迁移学习与动态知识图谱的混合架构设计与实践
技术原理与数学模型 1. 元学习冷启动适配器(MAML改进) 数学原理: \min_\theta \sum_{\mathcal{T}_i\sim p(\mathcal{T})} \mathcal{L}_{\mathcal{T}_i}(U_i(\theta - \alpha\nabla_\theta\mathcal{L}_{\mathcal{T}_i}^{sup}(\theta))))其中…...

小小小病毒(3)(~_~|)
一分耕耘一分收获 声明: 仅供损害电脑,不得用于非法。损坏电脑,作者一律不负责。此作为作者原创,转载请经过同意。 欢迎来到小小小病毒(3) 感谢大家的支持 还是那句话:上代码! …...
在 WSL上的 Ubuntu 中通过 Docker 来运行 Redis,并在微服务项目中使用redis
通过在 WSL(Windows Subsystem for Linux)上的 Ubuntu 虚拟机中通过 Docker 来运行 Redis,然后再微服务项目中使用redis 以下是步骤: 1. 安装 Docker(如果还未安装) 首先,确保你已经在 WSL 的…...

深入解析SVG图片原理:从基础到高级应用
文章目录 引言一、SVG基础概念1.1 什么是SVG?1.2 SVG的优势 二、SVG的基本结构2.1 SVG文档结构2.2 常用SVG元素 三、SVG的工作原理3.1 坐标系与变换3.2 路径与曲线3.3 渐变与滤镜 四、SVG的高级应用4.1 动画与交互4.2 数据可视化4.3 响应式设计 五、SVG的优化与性能…...
Python 中的一种调试工具 assert
assert 是 Python 中的一种调试工具,用于在代码中设置断言(assertion)。断言是一种声明,用于确保某个条件为真。如果条件为假,assert 会触发一个 AssertionError 异常,并可选地输出错误信息。 语法 asser…...
面基Spring Boot项目中实用注解一
在Spring Boot项目中,实用注解根据功能可以分为多个类别。以下是常见的注解分类、示例说明及对比分析: 1. 核心配置注解 SpringBootApplication 作用:标记主启动类,组合了Configuration、EnableAutoConfiguration和ComponentScan…...
【数据库维护】Clickhouse数据库维护关键系统表相关指标说明,支撑定位慢SQL及多实例场景下分析各实例运行情况
背景 当前使用环境上以Docker容器化部署Clickhouse服务8个实例,但在实际运行过程中,发现8个实例内存负载不均衡,ck-0实例在固定时间段内存会直线上升,直至服务报错memory exceeded max memory limit。 为排查ck-0节点内存直线上升…...
委托构造函数与继承构造函数
委托构造函数 允许同一类中的构造函数调用另一个构造函数,以复用初始化逻辑。 委托构造函数不能同时初始化成员变量,只能委托给其他构造函数。 避免循环委托(如构造函数A委托给B,B又委托给A)。 class MyClass { pu…...

DeepSeek操作Excel,实现图表自动化生成
案例 让DeepSeek操作Excel,实现图表自动化生成。我们只要用自然语言输入我们的需求(根据哪块单元格区域做什么图表),就可以直接在Excel中自动生成图表。 操作主界面和图表效果 设置接入方式 这里提供了多种接入方式将DeepSeek接…...
3.5 企业级AI Agent运维体系构建:从容器化部署到智能监控的工业级实践指南
企业级AI Agent运维体系构建:从容器化部署到智能监控的工业级实践指南 引言:AI时代运维的范式革新 Gartner研究指出,AI Agent系统的运维复杂度是传统应用的3.2倍,但采用云原生架构可使故障恢复时间缩短82%。本文以GitHub Sentinel、LanguageMentor等企业级案例为蓝本,揭…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...

Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...