欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > Kafka日志数据深度解析:从基础查看到高级操作全攻略

Kafka日志数据深度解析:从基础查看到高级操作全攻略

2025/2/20 12:55:09 来源:https://blog.csdn.net/qq_40477248/article/details/145638578  浏览:    关键词: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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词