我刚做了一个新的主题,还没有发表任何信息。文件名为 00000000000000000000.index 在目录中创建 /tmp/kafka-logs-1/topicname-0/ ,文件的大小非常大。我在vi中打开了那个二进制文件,内容只有“0000…”这是什么意思?这个索引文件是关于什么的?
00000000000000000000.index
/tmp/kafka-logs-1/topicname-0/
83qze16e1#
日志的每一段(文件*.log)都有相应的索引(文件*.index),它们的名称与表示基偏移量的名称相同。为便于理解,日志文件包含以消息格式构造的实际消息。对于该文件中的每条消息,前64位描述递增的偏移量。现在,在这个文件中查找具有特定偏移量的消息变得非常昂贵,因为日志文件可能会在GB的范围内增长。为了能够生成消息,代理实际上必须进行此类查找,以确定最新的偏移量,并能够进一步正确地增加传入消息的数量。这就是为什么有一个索引文件。首先,索引文件中消息的结构只描述了2个字段,每个字段的长度为32位:4字节:相对偏移量4字节:物理位置如前所述,文件名表示基准偏移量。与每个消息的偏移量递增的日志文件不同,索引文件中的消息包含相对于基本偏移量的相对偏移量。第二个字段表示相关日志消息的物理位置(基本偏移+相对偏移),因此,可以查找o(1)。毕竟,需要提到的是,并不是日志中的每条消息都在索引中包含相应的消息。默认情况下,配置参数index.interval.bytes是4096字节,它设置了一个索引间隔,基本上描述了添加索引项的频率(在多少字节之后)。关于.index文件的大小问题,可以这样说:配置参数segment.index.bytes(默认为10mb)描述了该文件的大小。这个空间被重新分配,只有在原木滚压后才会缩小。
byqmnocz2#
每个日志文件都有一个相应的索引文件,索引文件的作用是将逻辑消息偏移量转换为数据文件中的物理位置。如图所示编辑:从医生那里每个分区都是一个有序的、不可变的记录序列,它不断地附加到结构化提交日志中。在kafka中,主题分区不能跨多个代理进行拆分。现在,在kafka需要在保留期结束后从分区中删除一些消息的情况下,它需要扫描分区文件。如果存在单个大分区文件,此操作将非常慢。为了避免这种情况,Kafka将分区拆分为多个段。当前段(称为活动段)达到其大小限制(由控制)时创建的新段文件 log.segment.bytes 属性)。因此,对于每一部分都有一个 log 文件和 index 文件存在。现在,每个线段都从它们的基准偏移开始,该偏移大于前面线段中的偏移。日志文件,例如。 00000000005120942793.log 是kafka实际存储消息以及所有详细信息(如偏移量)的地方(一旦消息被推入kafka,它将被赋予一个称为 Offset 、时间戳、压缩、有效载荷等。索引文件,例如。 00000000005120942793.index 在日志中Map消息的实际位置。它通常由两部分组成,每个部分有4个字节。第一部分存储消息偏移量(相对于其基本偏移量),第二部分存储消息的位置。索引文件是内存Map的,kafka使用二进制搜索来定位小于或等于目标偏移量的最近偏移量。资料来源:http://kafka.apache.org/documentation.html#brokerconfigshttphttp://supergsego.com/apache/kafka/0.8.2.0/scaladoc/kafka/log/offsetindex。htmlhttps://thehoard.blog/how-kafkas-storage-internals-work-3a29b02e026
log.segment.bytes
log
index
00000000005120942793.log
Offset
00000000005120942793.index
2条答案
按热度按时间83qze16e1#
日志的每一段(文件*.log)都有相应的索引(文件*.index),它们的名称与表示基偏移量的名称相同。
为便于理解,日志文件包含以消息格式构造的实际消息。对于该文件中的每条消息,前64位描述递增的偏移量。现在,在这个文件中查找具有特定偏移量的消息变得非常昂贵,因为日志文件可能会在GB的范围内增长。为了能够生成消息,代理实际上必须进行此类查找,以确定最新的偏移量,并能够进一步正确地增加传入消息的数量。
这就是为什么有一个索引文件。首先,索引文件中消息的结构只描述了2个字段,每个字段的长度为32位:
4字节:相对偏移量
4字节:物理位置
如前所述,文件名表示基准偏移量。与每个消息的偏移量递增的日志文件不同,索引文件中的消息包含相对于基本偏移量的相对偏移量。第二个字段表示相关日志消息的物理位置(基本偏移+相对偏移),因此,可以查找o(1)。
毕竟,需要提到的是,并不是日志中的每条消息都在索引中包含相应的消息。默认情况下,配置参数index.interval.bytes是4096字节,它设置了一个索引间隔,基本上描述了添加索引项的频率(在多少字节之后)。
关于.index文件的大小问题,可以这样说:配置参数segment.index.bytes(默认为10mb)描述了该文件的大小。这个空间被重新分配,只有在原木滚压后才会缩小。
byqmnocz2#
每个日志文件都有一个相应的索引文件,索引文件的作用是将逻辑消息偏移量转换为数据文件中的物理位置。如图所示
编辑:
从医生那里
每个分区都是一个有序的、不可变的记录序列,它不断地附加到结构化提交日志中。
在kafka中,主题分区不能跨多个代理进行拆分。现在,在kafka需要在保留期结束后从分区中删除一些消息的情况下,它需要扫描分区文件。如果存在单个大分区文件,此操作将非常慢。为了避免这种情况,Kafka将分区拆分为多个段。
当前段(称为活动段)达到其大小限制(由控制)时创建的新段文件
log.segment.bytes
属性)。因此,对于每一部分都有一个log
文件和index
文件存在。现在,每个线段都从它们的基准偏移开始,该偏移大于前面线段中的偏移。日志文件,例如。
00000000005120942793.log
是kafka实际存储消息以及所有详细信息(如偏移量)的地方(一旦消息被推入kafka,它将被赋予一个称为Offset
、时间戳、压缩、有效载荷等。索引文件,例如。
00000000005120942793.index
在日志中Map消息的实际位置。它通常由两部分组成,每个部分有4个字节。第一部分存储消息偏移量(相对于其基本偏移量),第二部分存储消息的位置。索引文件是内存Map的,kafka使用二进制搜索来定位小于或等于目标偏移量的最近偏移量。资料来源:
http://kafka.apache.org/documentation.html#brokerconfigshttphttp://supergsego.com/apache/kafka/0.8.2.0/scaladoc/kafka/log/offsetindex。htmlhttps://thehoard.blog/how-kafkas-storage-internals-work-3a29b02e026