1、Offset如何标记数据
每个分区的offset都是从1开始标记的
每个分区将数据切分成segment(段),每个段由log和index两份文件组成
假设一个Topic的数据,有三个分区,存了4500条数据:
ruozedata-0 1开始标记…
ruozedata-1 1开始标记…
ruozedata-2 1开始标记…
命名规则:
第一组0开头,存了1000条:
00000000000000000000.index
00000000000000000000.log
第二组,由上一组的最后一条消息的offset来命名,存了2500条:
00000000000000001000.index
00000000000000001000.log
第三组,由第二组的最后一条消息的offset来命名,存了1000条:
00000000000000003500.index
00000000000000003500.log
绝对offset:是关于分区的全局id,比如ruozedata-0分区(3个log文件 全局的id)
相对offset::存储在index文件里,对应其log文件的消息的id,格式是:相对offset-id,对应log的pos位置
index存储:是稀疏存储的, log文件里的每条信息不会都有一个index的,而是挑选的部分index。
举例,假设mysql一张表维护的offset信息:
对于上面提到的概念,结合这个表,就一目了然。
mysql表
globalid sid message
1 1
2 2
3 3
4 4
...
1000 1000
------------------
1001 1
1002 2
1003 3
...
1010 10