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文件…...
单例模式、构造函数、左值右值
拷贝构造函数 简单的说就是——用一个对象构造另外一个对象 class Myclass {public:int d0;Myclass(int d_){d d_}; //常用的构造函数Myclass(Myclass c) //拷贝构造函数{d c.d;} }; //对比 class Myclass {public:int d0;Myclass(int d_){d d_}; //常用的构造函数Myclass…...
DeepSeek+即梦 做AI视频
DeepSeek做AI视频 制作流程第一步:DeepSeek 生成视频脚本和分镜 第二步:生成分镜图片绘画提示词第三步:生成分镜图片第四步:使用可灵 AI 工具,将生成的图片转成视频。第五步:剪映成短视频 DeepSeek 真的强&…...
「软件设计模式」建造者模式(Builder)
深入解析建造者模式:用C打造灵活对象构建流水线 引言:当对象构建遇上排列组合 在开发复杂业务系统时,你是否经常面对这样的类:它有20个成员变量,其中5个是必填项,15个是可选项。当用户需要创建豪华套餐A&…...
Android设备 网络安全检测
八、网络与安全机制 6.1 网络框架对比 volley: 功能 基于HttpUrlConnection;封装了UIL图片加载框架,支持图片加载;网络请求的排序、优先级处理缓存;多级别取消请求;Activity和生命周期的联动(Activity结束生命周期同时取消所有网络请求 …...
安心联车辆管理系统的硬件架构详解
安心联车辆管理系统的硬件架构可分为车载设备和后端平台设备两大部分,以下是详细的硬件组成及功能说明: 一、车载设备 定位与通信模块 北斗/GPS双模定位模块:支持厘米级定位精度,兼容JT/T808、JT/T809等交通部标准协议,…...
适用于iOS的应用商店优化(ASO)清单
面对App Store的激烈竞争,您想优化您的应用使其在竞争中脱颖而出,但又不知道应该从哪里开始。我们已经为您准备好了!我们整理了一份适用于iOS的应用商店优化(ASO)检查清单,用以帮助您入门并提高您在App Sto…...
linux概念详解
用户守护进程 用户空间守护进程是一些在后台运行的长期服务程序,提供系统级服务。 下面举一些例子。 网络服务: 如sshd(SSH服务)、httpd(HTTP服务)。 sshd:sshd 守护进程会在后台运行&#x…...
嵌入式开发应该具备哪些编程思维?
目录 1、资源限制思维 2、实时性思维 3、硬件抽象思维 4、中断驱动思维 5、功耗优化思维 6、可靠性和容错思维 7、并发和同步思维 8、故障排除与调试思维 9、状态机思维 嵌入式开发与一般的软件开发不同,嵌入式系统通常受到资源(内存、处理器、…...
MongoDB索引介绍
索引简述 索引是什么 索引在数据库技术体系中占据了非常重要的位置,其主要表现为一种目录式的数据结构,用来实现快速的数据查询。通常在实现上,索引是对数据库表(集合)中的某些字段进行抽取、排列之后,形成的一种非常易于遍历读取…...
编程速递-庆祝Delphi诞生30周年!
庆祝Delphi 30周年纪念是一个特别的时刻。 回到1995年,也就是30年前,在微软Windows和互联网时代的曙光初现之时,Borland Delphi的创建者们无法想象,当时使用Borland Delphi构建的应用程序至今仍在运行——为全世界数十亿人服务。…...
YOLOv11-ultralytics-8.3.67部分代码阅读笔记-tuner.py
tuner.py ultralytics\utils\tuner.py 目录 tuner.py 1.所需的库和模块 2.def run_ray_tune(model, space: dict None, grace_period: int 10, gpu_per_trial: int None, max_samples: int 10, **train_args,): 1.所需的库和模块 # Ultralytics 🚀 AGPL-…...
一文说清楚什么是Token以及项目中使用Token延伸的问题
首先可以参考我的往期文章,我这里说清楚了Cookie,Seesion,Token以及JWT是什么 其实Token你就可以理解成这是一个认证令牌就好了 详细分清Session,Cookie和Token之间的区别,以及JWT是什么东西_还分不清 cookie、sessi…...
VueRouter 实例
分析下列代码 const router new VueRouter({mode:history,routes }) 1.const router new VueRouter({ ... })用来创建一个 Vue Router 实例,用于管理 Vue.js 应用的路由。2.mode: history: 作用:启用 HTML5 History 模式,去除…...
【算法工程】解决linux下Aspose.slides提示No usable version of libssl found以及强化推理模型的短板
1. 背景 构建ubuntu镜像,然后使用Aspose.slides解析PPTX文档,发现一直提示“No usable version of libssl found”。 2. 尝试 使用deepseek R1、kimi1.5、chatgpt o3,并且都带上联网能力,居然还是没有一个能够真正解决…...
解析浏览器中JavaScript与Native交互原理:以WebGPU为例
引言 随着Web应用复杂度的提升,开发者对浏览器访问本地硬件能力的需求日益增长。然而,浏览器必须在开放性与安全性之间找到平衡——既不能放任JavaScript(JS)随意操作系统资源,又要为高性能计算、图形渲染等场景提供支…...
小火车理论
格助词...
深度学习框架探秘|Keras 应用案例解析以及 Keras vs TensorFlow vs PyTorch
引言 上一篇文章《深度学习框架探秘|Keras:深度学习的魔法钥匙》 我们初步学习了 Keras,包括它是什么、具备哪些优势(简洁易用的 API、强大的兼容性、广泛的应用领域),以及基本使用方法。本文,…...
【01 背包】
01 背包解题思路: 有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。 这是标准的背包问题,每一件物品其实只有两个状…...
算法10-二分查找算法
一、二分查找算法概念 二分查找(Binary Search)是一种高效的查找算法,适用于在有序数组中快速查找目标值。它的核心思想是通过不断缩小查找范围,将时间复杂度从线性查找的 O(n) 优化到 O(log n)。 二、二分查找的流程图 以下是二…...
变相提高大模型上下文长度-RAG文档压缩-3.优化map-reduce(reranker过滤+社区聚类)
我遇到的业务问题实际上是RAG需要处理很多同一对象的日常报告,不像常识类问题,它的相关Document更多而且更分散,日常报告代表数据库里有很多它的内容,而且对象可能只在段落中的几句话提及到。top-k数量受限于大模型长度࿰…...
算法11-分治算法
一、分治算法概念 分治算法(Divide and Conquer)是一种重要的算法设计思想,通过将问题分解为多个子问题,分别解决后再合并结果,从而解决原问题。分治算法的核心思想是“分而治之”,通常包含三个步骤&#…...
Golang internals
To be continued... time.Time golang的时区和神奇的time.Parse context.Context Go Context的踩坑经历 sync.Pool sync.Pool workflow in Go 1.12 new shared pools in Go 1.13 什么是cpu cache理解 Go 1.13 中 sync.Pool 的设计与实现Go: Understand the Design of Sync.Pool…...
Flask中获取请求参数的一些方式总结
在 Flask 中,可以从 request 对象中获取各种类型的参数。以下是全面整理的获取参数的方式及示例代码。 1. 获取 URL 查询参数(Query String Parameters) URL 中的查询参数通过 ?keyvalue&key2value2 的形式传递,使用 reques…...
vscode/cursor 写注释时候出现框框解决办法
一、问题描述 用vscode/cursor写注释出现如图的框框,看着十分难受,用pycharm就没有 二、解决办法 以下两种,哪个好用改那个 (1)Unicode Highlight:Ambiguous Characters Unicode Highlight:Ambiguous Characters &a…...
11-跳跃游戏
给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false 。 贪心算法思路分析 在遍…...
TestHubo基础教程-创建项目
TestHubo是一款国产开源一站式测试工具,涵盖功能测试、接口测试、性能测试,以及 Web 和 App 测试,可以满足不同类型项目的测试需求。本文将介绍如何快速创建第一个项目,以快速入门上手。 1、创建项目 在 TestHubo 中,…...
GHOST重装后DEF盘丢失的全面解析与数据恢复实战指南
GHOST作为一款经典的系统备份与还原工具,因其高效便捷的特性被广泛应用于系统重装和数据恢复场景。然而,许多用户在使用GHOST重装系统后,发现DEF盘(即D盘、E盘、F盘等非系统盘)突然丢失,导致重要数据无法访…...
soular基础教程-使用指南
soular是TikLab DevOps工具链的统一帐号中心,今天来介绍如何使用 soular 配置你的组织、工作台,快速入门上手。  1. 账号管理 可以对账号信息进行多方面管理,包括分配不同的部门、用户组等,从而确保账号权限和职责…...
刷题记录(回顾)HOT100 二叉树-10: 199. 二叉树的右视图
题目:199. 二叉树的右视图 难度:中等 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下: 节点的左 子树 只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左…...
【Java学习】类和对象
目录 一、选择取块解 二、类变量 三、似复刻变量 四、类变量的指向对象 五、变量的解引用访问 1.new 类变量(参) 2.this(参) 3.类变量/似复刻变量. 六、代码块 七、复制变量的赋值顺序 八、访问限定符 1.private 2.default 九、导类 一、选择取块解 解引用都有可以…...
安卓基础(Adapter)
想象一下,你有一堆玩具(数据),这些玩具很特别,每个玩具都是不同的,可能有汽车、飞机、积木等。现在,你想把这些玩具摆放到一个展示柜(显示的界面)里,给大家看…...
mybatis-lombok工具包介绍
Lombok是一个实用的]ava类库,能通过注解的形式自动生成构造器、getter/setter、equals、hashcode、toString等方法,并可以自动化生成日志变量,简化java开发、提高效率。 使用前要加入Lombok依赖...
React - 高阶函数-函数柯里化
在 JavaScript 和 React 中,高阶函数是指能够接收其它函数作为参数,或者返回一个函数的函数。柯里化是一种将函数的多个参数转化为一系列嵌套函数的技术,通常用于简化函数的使用和提高其可组合性。 使用前: import React,{Compo…...
数据守护者:备份文件的重要性及自动化备份实践
在信息化社会,数据已成为企业运营和个人生活的重要组成部分。无论是企业的核心业务数据,还是个人的珍贵照片、重要文档,数据的丢失或损坏都可能带来无法估量的损失。因此,备份文件的重要性愈发凸显,它不仅是数据安全的…...
【kafka系列】消费者重平衡
目录 流程 1. 消费者组重平衡(Rebalance)的流程逻辑分析 阶段一:触发重平衡 阶段二:消费者组协调 阶段三:重平衡完成 关键设计思想 2. Mermaid 流程代码 关键点总结 重平衡的影响 1. 重平衡期间的消费行为 2…...
光谱相机在天文学领域的应用
天体成分分析 恒星成分研究:恒星的光谱包含了其大气中各种元素的吸收和发射线特征。通过光谱相机精确测量这些谱线,天文学家能确定恒星大气中氢、氦、碳、氮、氧等元素的含量。如对太阳的光谱分析发现,太阳大气中氢元素占比约 71%࿰…...
Java 基于 SpringBoot+Vue 的家政服务管理平台设计与实现
博主介绍:✌程序员徐师兄、8年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战*✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…...
ABC393E/F简要题解
ABC393E 给定数组 A A A,求包含元素 A i A_i Ai的大小为 k k k的子集中最大的最大公约数。 题解: 首先思考对于整个数组所有包含 k k k个元素的子集中最大的GCD是多少,可以怎么求。 我们发现,如果一个数 x x x,数组中如果存在至少 k k …...
什么是Mustache
Mustache 是一种轻量级模板引擎,用于将变量插入到模板中生成最终的文本输出。它的设计简单且易于使用,适用于多种编程语言,包括 JavaScript、Python、Ruby、Java 等。 Mustache 的模板语法使用双大括号 {{}} 包裹变量或表达式,用…...
GGUF格式的DeepSeek-R1-Distill-Qwen-1.5B模型的字段解析
在将GGUF文件转换为PyTorch格式之前,先要读取文件并了解模型中都有什么字段,会遇到了各种参数不匹配的问题。现在,我们先读取GGUF文件的元数据字段,并希望将这些字段中的内存映射(mmap)数据转换为字符串显示…...
Java和SQL测试、性能监控中常用工具
下面我会详细列举一些在Java和SQL测试、调试、性能监控中常用的工具,并结合项目中提到的各个技术点说明如何选择合适的工具和方法。 一、Java项目常用的测试、调试与性能监控工具 单元测试与集成测试: JUnit/TestNG: 用于编写单元测试和集成测…...
CAS单点登录(第7版)13.票务
如有疑问,请看视频:CAS单点登录(第7版) 票务 概述 票务 有两个核心的可配置工单组件: TicketRegistry - 提供持久票证存储。ExpirationPolicy - 提供票证过期语义的策略框架。 工单注册 部署环境和技术专业知识…...
大语言模型入门
大语言模型入门 1 大语言模型步骤1.1 pre-training 预训练1.1.1 从网上爬数据1.1.2 tokenization1.1.2.1 tokenization using byte pair encoding 1.3 预训练1.3.1 context1.3.2 training1.3.3 输出 1.2 post-training1.2.1 token 1.2 SFT监督微调1.3 人类反馈强化学习1.3.1 人…...
从ARM官方获取自己想要的gcc交叉编译工具链接(Arm GNU Toolchain),并在Ubuntu系统中进行配置
前言 本文是博文 https://blog.csdn.net/wenhao_ir/article/details/145547974 的分支博文。 在本博文中我们完成gcc交叉编译工具gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf.tar.xz的下载、配置、测试。 下载自己想要的gcc交叉编译工具的源码 目标文件的名字及说…...
LDR6500:重塑充电与数据传输的新篇章
在当今快速发展的数字时代,电子设备对充电速度、数据传输效率和兼容性提出了更高要求。LDR6500,作为一款专为USB Type-C Bridge设备设计的USB-C DRP(Dual Role Port,双角色端口)接口USB PD(Power Delivery&…...
Matlab 机器人 雅可比矩阵
工业机器人运动学与Matlab正逆解算法学习笔记(用心总结一文全会)(四)——雅可比矩阵_staubli机器人正逆向运动学实例验证matlab-CSDN博客 matlab求雅可比矩阵_六轴机械臂 矢量积法求解雅可比矩阵-CSDN博客 (63 封私信 / 80 条消息…...
网络安全防护:开源WAF雷池SafeLine本地部署与配置全流程
文章目录 前言1.关于SafeLine2.安装Docker3.本地部署SafeLine4.使用SafeLine5.cpolar内网穿透工具安装6.创建远程连接公网地址7.固定Uptime Kuma公网地址 前言 对于建站新手来说,无论你选择创建的是个人博客、企业官网还是各类应用平台来推广自己的内容或是产品&am…...
vue框架生命周期详细解析
Vue.js 的生命周期钩子函数是理解 Vue 组件行为的关键。每个 Vue 实例在创建、更新和销毁过程中都会经历一系列的生命周期阶段,每个阶段都有对应的钩子函数,开发者可以在这些钩子函数中执行特定的操作。 Vue 生命周期概述 Vue 的生命周期可以分为以下几…...
Ollama 安装使用指南
rootdeepseek-1:/home/zgq/.ollama# lsof -i :11434 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME ollama 29005 root 3u IPv4 47359 0t0 TCP localhost:11434 (LISTEN) 从以上提供的 lsof 输出来看,Ollama 服务正在监听 localhost:11434…...