首页 > 其他分享 >二、kafka的文件存储机制

二、kafka的文件存储机制

时间:2024-03-26 11:33:37浏览次数:16  
标签:文件 存储 log index kafka 消息 Kafka

简图:

 

producer 将数据写入kafka后,集群需要对数据进行保存。

kafka将数据保存在磁盘,kafka初始会单独开辟一块磁盘空间,顺序写入(效率比随机写入高)。

 

1、partition结构

partition在服务器上表现形式是一个个文件夹,生产者将生产的消息不断追加到log文件的末尾,为防止log文件过大导致数据定位效率低,kafka采取分片和索引的机制,将每个partition分为多个segment。

每组segment文件包含 .index文件、.log文件 、.timeindex文件。

log和index文件位于一个文件夹下,该文件夹命名规范为: topic名称+分区序号。例如:simon这topic有2个分区,对应的文件夹 simon-0 、simin-1

 

 log文件就是实际存储message的地方,二index和timeindex文件为索引文件,用于检索消息。

2、message 结构

log 文件就实际是存储 Message 的地方,我们在 Producer 往 Kafka 写入的也是一条一条的 Message。

消息主要包含:

  Offset:Offset 是一个占 8byte 的有序 id 号,它可以唯一确定每条消息在 Parition 内的位置;
  消息大小:消息大小占用 4byte,用于描述消息的大小;
  消息体:消息体存放的是实际的消息数据(被压缩过),占用的空间根据具体的消息而不一样。

 

index和log文件以当前segment的第一条消息的offset命名,下图为index文件和log文件的结构示意图:

 

例如:进入simon-0目录下查看

 3、存储策略

无论消息是否被消费,Kafka 都会保存所有的消息。那对于旧数据有什么删除策略呢?

  基于时间,默认配置是 168 小时(7 天);
  基于大小,默认配置是 1073741824。
需要注意的是,Kafka 读取特定消息的时间复杂度是 O(1),所以这里删除过期的文件并不会提高 Kafka 的性能

标签:文件,存储,log,index,kafka,消息,Kafka
From: https://www.cnblogs.com/zmjc/p/18096236

相关文章

  • 文件删除原理
    一、删除原理Linux通过link数量控制文件删除的,只有当一个文件i_count和i_link都为0,文件才被删除。i_count为当前文件被调用的数量(内存引用计数器,被进程调用时增加);i_link为介质连接数量(磁盘引用计数器,创建硬链接时增加)。rm删除文件改变的是i_link数。二、查询方法 1、i......
  • 前端下载超大文件的完整方案
    本文从前端方面出发实现浏览器下载大文件的功能。不考虑网络异常、关闭网页等原因造成传输中断的情况。分片下载采用串行方式(并行下载需要对切片计算hash,比对hash,丢失重传,合并chunks的时候需要按顺序合并等,很麻烦。对传输速度有追求的,并且在带宽允许的情况下可以做并行分片下载)。......
  • 查看二进制文件
    SublimeText感觉Notepad++显示的十六进制比较松散,我知道字体可以调整,行间矩应该也可以调整,但是懒得调了,我看UltraEdit的显示效果就挺好,后来想到Linux下别人常用SublimeText,于是安装了这个,效果也很好。官方:https://www.sublimetext.com/download安装后默认是英文的,中文和查看十......
  • .net core上传文件、.net core接收文件上传
    我要做一个winform程序,上传文件到.net8的文件上传接口winform///<summary>///选择图片上传///</summary>///<paramname="sender"></param>///<paramname="e"></param>privateasyncvoidbtnExtract_Click(objectsender,Even......
  • linux终端编译单文件与多文件
    .c单文件:rani@DocR:~/Downloads$mkdirtestrani@DocR:~/Downloads$cdtestrani@DocR:~/Downloads/test$vimhello.crani@DocR:~/Downloads/test$gcchello.c-ohellorani@DocR:~/Downloads/test$./helloHelloworld.cpp单文件rani@DocR:~/Downloads/test$vimprin......
  • 完整的logback-spring.xml配置文件
    <?xmlversion="1.0"encoding="UTF-8"?><!--日志级别从低到高分为TRACE<DEBUG<INFO<WARN<ERROR<FATAL,如果设置为WARN,则低于WARN的信息都不会输出--><!--scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true--><!--scanPeriod:设置监......
  • Java服务器开发的日志:日志的作用和使用方法;日志文件的定期归档、清理和滚动策略;ELK(又
    Java服务器开发的日志Java服务器开发,为什么要使用日志?应该怎样使用日志?在Java服务器开发中使用日志是非常关键的一个实践,原因如下:本文所说的“日志”,主要是指程序运行时生成的技术日志;它在Java服务器开发中的作用和使用方法如下:故障诊断:技术日志主要用于记录程序运......
  • 浅谈如何阅读和编写mib文件
    MIB(ManageInformationBase)管理信息库,它是网络管理数据的标准,这个标准里规定了网络代理设备必须保存的数据项目,数据类型,以及允许在每个数据项目中的操作。通过对这些数据项目的存取访问,就可以得到改网关的统计内容。再通过对多个网关统计内容的综合分析即可实现基本的网络管......
  • C语言中整数和浮点数在内存中的存储
    一、整数在内存中的存储我们知道整数的二进制表示形式有三种,原码、反码、补码。三种表示方法均由符号位和数值位两部分构成,符号位用0表示正,用1表示负,最高一位被当作符号位,其余位被当作数值位。其中,正整数的原码、反码、补码三种表示相同负整数的原码:对应10进制数直接转换过......
  • Fastapi和requests文件的下载和上传
     介绍FastApi搭建一个简单下载和上传的服务,通过接口将文件保存在服务器上,而通过requests库子在本机中批量从服务器上传和下载文件FastApi搭建服务#application.py"""fastapi+request上传和下载功能"""fromfastapiimportFastAPI,UploadFilefromfastapi.respon......