kafka-producer-perf-test.sh生产的数据究竟是什么?

1. 概述
在 kafka发行包的 /bin 目录下,有一个脚本工具是: kafka-producer-perf-test.sh ,该工具主要用来向 kafka 主题中生产数据。比较好奇的是,这个工具到底生产了什么数据到kafka 的主题中,其格式是什么?内容又是什么?为了探索其topic 分区上面的生产数据,下面我将一步步对其进行剖析。
(1)创建主题 T_1

sh kafka-topics.sh --create --zookeeper 10.66.xxx.xx:2181 --topic T_1 --partitions 1 --replication-factor 1

查看刚创建的主题详细信息:
在这里插入图片描述
(2)向主题 T_1 生产 1 条数据,该数据报文大小为 100 字节

sh /home/soft/kafka/kafka_2.11-0.10.0.1/bin/kafka-producer-perf-test.sh --producer-props bootstrap.servers=10.66.xxx.xx:9092 --topic T_1      --num-records 1  --record-size 10 --throughput 400
1 records sent, 4.464286 records/sec (0.00 MB/sec), 218.00 ms avg latency, 218.00 ms max latency, 218 ms 50th, 218 ms 95th, 218 ms 99th, 218 ms 99.9th.


(3)消费主题 T_1 数据

sh /home/soft/kafka/kafka_2.11-0.10.0.1/bin/kafka-consumer-perf-test.sh --zookeeper 10.66.xxx.xx:2181 --topic T_1  --message-size 10 --messages     1  --threads 1
start.time, end.time, data.consumed.in.MB, MB.sec, data.consumed.in.nMsg, nMsg.sec
2019-07-17 10:36:32:646, 2019-07-17 10:36:32:654, 0.0000, 0.0012, 1, 125.0000

在这里插入图片描述
可以看到,已经成功消费到1条数据,这个数据便为刚才我们生产的数据。但是具体内容是什么? kafka-consumer-perf-test.sh 消费脚本中并没有提供打印消息的参数选项。至少我现在用的2.11版本的没有提供。

2. 脚本 kafka-run-class.sh + kafka.tools.DumpLogSegments 让你看清数据的本质
[ 附件:使用 strings 也可以直接查看] 2019-07-30补充

kafka中提供的 DumpLogSegment 工具可以查看片段中的内容,包括“消息偏移量、校验和、魔术数字节、消息大小和压缩算法”。如下:

sh kafka-run-class.sh  kafka.tools.DumpLogSegments --print-data-log --files /home/SATA1/test/kakfa_data/T_1-0/00000000000000000000.log

在这里插入图片描述
可以看到,主题T_1中的数据是字符串,刚好是10字节大小。如果将报文长度增大,其中仍然是全字符串。 其中 --file 后面是 server.properties配置文件中,kafka 数据文件存放的目录。

log.dirs=/home/SATA1/test/kakfa_data

上面是我kafka 的日志数据目录。所以在 /home/SATA1/test/kakfa_data 目录(注意,在kafka_data/目录下还有一层子目录,这个子目录是以kafka主题名+分区个数(分区从0开始递增,若一个主题有多个分区的话)名为目录名称,本例中T_1主题只有一个分区,所以该子目录名字是T_1-0,然后该子目录下会有一个 xxxx.log 和 xxx.index的文件。其中xxxx.log则为kafka 主题中的数据, 而其中的xxx.index则为其log目录文件中对应数据的索引(这个下面会进行分析)。如:00000000000000000000.index 00000000000000000000.log

3. 关于 00000000000000000000.index
可以看到,xxx.log 总是会伴随着一个 xxx.index。 那个这个xxx.index的作用是什么呢?或它里面的内容是什么呢? 其实index文件中存放的是xxx.log数据日志文件中的消息的位置和偏移。即 索引(记住:kafka 为每个分区维护了一个索引)。这样就可以很高效率的实现一些“比如获取从偏移量24开始的1K大小数据”。这时候所有会将偏移量映射到某片段文件和该偏移量在片段文件中的位置。

sh kafka-run-class.sh  kafka.tools.DumpLogSegments --print-data-log --files /home/SATA1/test/kakfa_data/T_1-0/00000000000000000000.lndex

通过上面的打印可以看到,index中的主要内容是 offset 和 position:

offset: 0 position: 0

这和00000000000000000000.log日志文件中的 offset 、position是一一对应的。




































你可能感兴趣的:(kafka)