kafka log存储
来源:互联网 发布:淘宝给差评遭报复杀人 编辑:程序博客网 时间:2024/05/19 23:55
因为程序从kafka里某一个topic读取的数据量过大,所以想看看这topic一天共有多少数据量,到底是不是读取的api有问题。
登录到该topic某一个paritition所在的机器上,进入到kafka-logs目录下该topic-partition的子目录。子目录中存储的数据文件如下
-rw-r--r-- 1 root root 906048 12月 22 10:57 00000000000013128029.index-rw-r--r-- 1 root root 1073741161 12月 22 10:57 00000000000013128029.log-rw-r--r-- 1 root root 1360104 12月 25 21:00 00000000000013622079.index-rw-r--r-- 1 root root 1073737654 12月 25 21:00 00000000000013622079.log-rw-r--r-- 1 root root 10485760 12月 28 15:49 00000000000014923211.index-rw-r--r-- 1 root root 993289158 12月 28 15:50 00000000000014923211.log
每一个index和log文件是一对,当log文件大到一定阀值后,就会生成一对新的index和log文件,文件名上的数字,就是这对log文件开始存储的offset。
以 00000000000013622079.log 为例,这个文件的创建时间就是其第一条数据的接收时间,修改时间就是最后一条数据接收时间
stat 00000000000014923211.log File: `00000000000014923211.log' Size: 993355992 Blocks: 2731904 IO Block: 4096 regular fileDevice: 810h/2064dInode: 1073756571 Links: 1Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)Access: 2016-12-25 21:00:30.775876656 +0800Modify: 2016-12-28 15:50:37.844860136 +0800Change: 2016-12-28 15:50:37.844860136 +0800而它下一个文件 00000000000014923211.log 名字上的offset,就是其最后一个数据的offset+1。
所以,在2016-12-25 21:00:30到2016-12-28 15:50:37这段时间内,该partition共收到数据14923211-13622079=1301132条。
那对于最后一个还没有被旋转的文件,又需要怎么看呢?
index文件是对log文件的索引,里面存储了对应log文件里的数据条数和其对应的文件偏移量的映射关系。文件是二进制的,可以用hexdump -C查看。
同样以 00000000000013622079.index 为例
00000000 00 00 00 04 00 00 11 6d 00 00 00 0b 00 00 21 90 |.......m......!.|00000010 00 00 00 0f 00 00 44 dc 00 00 00 13 00 00 7c 5d |......D.......|]|...0014c0d0 00 13 da 77 3f ff a0 db 00 13 da 7f 3f ff b1 be |...w?.......?...|0014c0e0 00 13 da 83 3f ff e1 31 |....?..1|0014c0e8
index数据结构是:4Bytes的offset相对偏移,4Bytes的物理文件偏移。index并不是对每一个数据都记录的文件偏移,这样比较节省空间。
上述输出结果翻译可得
4,446111,859215,17628...1301111,10737174671301119,10737217901301123,1073733937第一行代表该文件的第4条数据,就是该partition内offset为(13622079+4)的这条数据,可以从该log文件的4461位置开始读。
最后一行的offset为1301123,与该文件内总数据条数1301132差不多。
所以,用同样的方法查看最后一个index文件,就可以知道当前该partition的最大offset是多少了。
补充一点,
kafka api在试图读取某一个时间开始的数据时,是先通过log文件的最后修改时间定位到某一个log文件,然后再在该log文件里进一步查找。
我之前迁移过一个kafka broker,导致某一个partition内log文件的修改时间都是很新的日期,kafka api读取是就会报offsetOutOfRange的错误。
解决方法:手动修改文件的modify time...
touch -d "20161209 17:00:00" 00000000000005284459.log
0 0
- kafka log存储
- Kafka的Log存储解析
- Kafka的Log存储解析
- Kafka深入解析Log存储
- Kafka的Log存储解析
- Kafka的Log存储解析
- Kafka的Log存储解析
- Kafka的Log存储原理
- apache kafka log 存储格式
- Kafka的Log存储解析
- Kafka的Log存储解析
- kafka的log存储是怎么设计的?
- Kafka log结构解读
- Kafka源代码解析 --- Log Segment
- Kafka#4:存储设计
- Kafka文件存储机制
- kafka存储机制
- kafka的文件存储
- Idea 工具创建 Maven Web 项目
- HaiQiu整理AndroidStudio配置
- 欢迎使用CSDN-markdown编辑器
- Java类成员变量、普通成员变量、初始化块、构造方法的初始化和执行顺序
- Ubuntu安装jdk导致linux命令失效
- kafka log存储
- 音乐信息检索综述报告
- 嵌入式笔记之Makefile
- 快乐很简单
- 查看Android 系统发送的广播
- OSX小白安装MySQL中出现的问题
- javascript学习之日期 字符串(19)—— 字符串 常用方法(下)
- How JQuery Works
- Codeforces 507B Amr and Pins【思维】