首页 > 其他分享 >12_Kafka高级_文件存储

12_Kafka高级_文件存储

时间:2022-11-17 12:36:37浏览次数:55  
标签:index 存储 12 log 文件 偏移量 Kafka 1G


12_Kafka高级_文件存储_偏移量


实际上能看到的就是topicName+partitionID这个文件。

这个文件下有两个东西很重要。

12_Kafka高级_文件存储_数据_02


.log结尾的文件是真正存储数据的。

.index是存放索引的。

12_Kafka高级_文件存储_数据_03


先看看.log文件:默认会存储7天。七天过了会把这些老的数据删除掉。

12_Kafka高级_文件存储_数据_04

再server.properties配置文件种,还有一个参数:存储1G

12_Kafka高级_文件存储_数据_05


12_Kafka高级_文件存储_存储数据_06

这个log是这个

12_Kafka高级_文件存储_偏移量_07


而不是它的日志。

如果这个文件超过了1G,就会再创建一个文件。而不会再往里面放数据了。超过1G之后,新创建一个文件,怎么命名呢?

1G的文件,存储的都是消息,怎么快速从1G数据里面定位到这个数据呢?

这个时候就有index文件起作用了。

12_Kafka高级_文件存储_偏移量_08


segment:片段。指的是当前这个分区里面的一个片段数据。里面只存储数据hello,atguigu等等。但是怎么定位,就需要依赖index。

12_Kafka高级_文件存储_偏移量_09


12_Kafka高级_文件存储_数据_10


kafka的分片机制:分片的规则,按照1G进行分片,往log里面只放数据。

12_Kafka高级_文件存储_kafka_11


这些东西就是偏移量,是当前log最小的偏移量,

.index文件里面存储的东西:

假如某个分区里面形成了两个log文件,

12_Kafka高级_文件存储_数据_12


index索引对应的是log文件的索引。

我们假设log文件里面有六台就存储了1G。

所以对应的是

00000000000000.index

00000000000000.log

.log里面只存储数据,但是数据被序列化了,cat看不到。

.index里面提供的是索引,存储的是开始位置的偏移量。

因为.log文件中存储的是具体的6条消息,所以index里面提供的是当前log文件对应消息的索引。是开始位置的偏移量。

12_Kafka高级_文件存储_存储数据_13


存储的是当前6条消息的起始偏移量。

这样设计的方式可以怎么定位数据呢?

首先,比较index后缀,需要找到这个消息对应的index文件。使用二分查找法定位到index文件。定位到文件之后,就需要找到具体的消息。这里存储的是消息的起始偏移量。所以,index文件里面的每一条数据的大小都是一样的,因为他们相当于元数据,存储的是相同的内容。他们存储的内容包括,对应消息的起始偏移量和消息的大小。

12_Kafka高级_文件存储_偏移量_14


它们的大小一样,所以可以快速的定位到某条消息的起始偏移量

hdfsIO流的分段读取:seek()比如,现在找到了消息3这个起始偏移量而且这个消息的大小是1000B,那我们就需要定位:756-1756这段数据拿出来,就找到了第三个消息的内容。

12_Kafka高级_文件存储_存储数据_15


1、通过二分查找找到索引文件

2、因为,在索引文件中,每条数据大小一样,扫描的话,就非常的快,就能很快地找到偏移量和对应消息的大小,然后再去log中去查找。

比我们直接去log里面找,快得多。

所以,虽然kafka把数据存储在磁盘中,但是读写速度还是很快的。


标签:index,存储,12,log,文件,偏移量,Kafka,1G
From: https://blog.51cto.com/u_15881639/5860642

相关文章

  • 11_Kafka高级_工作流程
    kafka的工作流程和文件存储机制:当生产者往一个不存在的主题发送数据的时候,也可以发送。自己会帮你创建主题,一个分区,一个副本。是server.properties文件里面配置的。这是默......
  • 13_Kafka高级_生产者分区策略
    刚才主要讲的是存储的内容,主要的index和.log两个文件。kafka的生产者:有个分区策略:分区的原因:1、可以以partition为单位进行读写2、提高集群的负载能力。生产者分区的原......
  • 09_Kafka入门_数据日志分离
    关闭kafka但是会有延时,关闭的比较慢。之后再看一下就没了,需要等待一下。我们删除每台机器的logs文件夹:我们希望把数据和logs分开来放。这时候,就相当于kafka新装的一样......
  • 15_Kafka高级_生产者ACk机制
    3)ack应答机制对于某些不太重要的数据,对数据的可靠性要求不是很高,能够容忍数据的少量丢失,所以没必要等ISR中的follower全部接收成功。所以Kafka为用户提供了三种可靠性级别......
  • 16_Kafka高级_数据一致性问题
    (1)follower故障follower发生故障后会被临时踢出ISR,待该follower恢复后,follower会读取本地磁盘记录的上次的HW,并将log文件高于HW的部分截取掉,从HW开始向leader进行同步。等......
  • 【2022-11-12】搞好关系
    20:00过去事已过去了,未来不必预思量。只今只道只今句,梅子熟时栀子香。                              ......
  • 强烈推荐!老板再也不用担心我的数据存储了-搭建GFS
    理论优点:分布式卷具有更好的性能、高扩展性以及可靠性,而且无元服务器(存放所有目录的结构,类似书的目录,方便找到所需数据在哪个节点),某种类型的分布式卷不但支持高扩展而且,具备......
  • zk,kafka,redis哨兵,mysql容器化
    1.zookeeper,kafka容器化1.1zookeeper+kafka单机docker模式dockerpullbitnami/zookeeper:3.6.3-debian-11-r46dockerpullbitnami/kafka:3.1.1-debian-11-r36dock......
  • 使用mongodb存储fluentd 事件,报错Mongo::Auth::Unauthorized error="User admin (mech
    一、问题描述 使用fluentd的mongodb插件,将nginx的日志,存储到mongodb数据库中,配置如下: <source>@typetailpath/var/log/nginx/access.logpos_file/var/......
  • CTFshow刷题日记-WEB-PHP特性(下篇123-150)
    web123,125,126error_reporting(0);highlight_file(__FILE__);include("flag.php");$a=$_SERVER['argv'];$c=$_POST['fun'];if(isset($_POST['CTF_SHOW'])&&isset($_POST['C......