首页 > 其他分享 >Kafka 的数据存储设计

Kafka 的数据存储设计

时间:2024-01-25 23:25:00浏览次数:30  
标签:文件 存储 数据文件 index Kafka 索引 设计 Message Segment

Segment 数据文件

Partition 在物理上由多个 Segment 数据文件组成,每个 Segment 数据文件大小相等、按顺序读写。每个 Segment 数据文件的第一个文件名从 0 开始,后续每个 Segment 文件名为上一个全局 Partition 的最大offset,文件扩展名为 .log。在查找指定 Offset 的 Message 中,用二分查找就可以定位到该 Message 在哪个 Segment 数据文件中。

Segment 数据文件会首先被存储在内存中,当 Segment 上的消息条数达到配置值或消息发布时间超过阈值时,Segment 上的消息会被 flush 到磁盘,只有 flush 到磁盘上的消息才能被 Consumer 消费,Segment 达到一定的大小(默认是 1 GB,可配置)后将不会再往该 Segment写数据,Broker 会创建新的 Segment。

Segment 索引文件

Kafka 为每个 Segment 数据文件都建立了索引文件,索引文件的文件名与数据文件的文件名一致,不同的是索引文件的扩展名为 .index。比如:

Segment 索引文件索引文件并不会为数据文件中的每条 Message 都建立索引,而是采用系数索引的方式,每个一定字节建立一条索引。这样可有效降低索引文件大小,方便将索引文件加载到内存中,提高集群的吞吐量。

如下图所示,000000000000036869.index 文件中记录了 (3,497) ,在数据文件中表示第 3 个 Message(在全局Partition 表示第 368772 个 Message),该 Message 的物理偏移地址为 497。

Partition 中通过 Offset 查找 Message

比如读取 Offset=368776 的 Message,需要通过下面 2 个步骤进行查找:

  • 查找 Segment 文件

    其中00000000000000000000.index 表示最开始的文件,起始 Offset=0。第二个文件 00000000000000368769.index 文件的起始偏移量为 368770 (368769 + 1)。同样,第三个文件00000000000000737337.index 文件的起始偏移量为 737338 (737337 + 1) ,其他后续文件依次类推,以起始偏移量命名并排序这些文件,根据 Offset 二分查找文件列表,快速定位到 00000000000000368769.index 文件。

  • 通过 Segment 文件查找 Message

    当 Offset=368776 时,依次定位到 00000000000000368769.index 的元数据物理位置和 00000000000000368769.log 的物理偏移地址,然后再通过 00000000000000368769.log 顺序查找直到 Offset=368776为止。

参考:

标签:文件,存储,数据文件,index,Kafka,索引,设计,Message,Segment
From: https://www.cnblogs.com/i9code/p/17988401

相关文章

  • Kafka 集群
    典型拓扑结构Kafka集群包含若干个Producer,若干个Broker(Kafka集群支持水平扩展,一般Broker数量越多,整个Kafka集群的吞吐量也就越高),若干个ConsumerGroup,以及一个Zookeeper集群。Kafka通过Zookeeper管理集群配置。Producer使用Push模式将消息发布到Broker上,C......
  • Kafka 中一些常见的问题
    消息消费的顺序问题消息在被追加到Partition的时候都会分配一个特定的偏移量(offset),Kafka通过偏移量(offset)来保证消息在分区内的顺序性。为了保证Kafka中消息消费的顺序,可以采用以下2种方法:设置1个Topic只对应一个Partition破坏了Kafka的设计初衷,不推荐使用。......
  • Kafka 的高可用原理
    Kafka集群由若干个Broker组成,Topic由若干个Partition组成,每个Partition可存在不同的Broker上。可以这样说,一个Topic的数据,分散在多个机器上,即每个机器上都存放一部分数据。Kafka0.8以前Kafka0.8以前是没有高可用机制的。假设一个Topic,由3个Partiton组成。......
  • Kafka 特性总结
    Kafka特性可总结如下:1.高可用Kafka0.8以前是没有高可用机制的。Kafka0.8以后,通过副本机制来实现高可用,基于副本机制实现Kafka的高可用。2.持久性Kafka集群接收到Producer发过来的消息后,将其持久化到磁盘。此外,还支持数据备份。3.数据不易丢失通过合理的配置,Ka......
  • 【豆瓣9.1】《大数据处理框架Apache Spark设计与实现(全彩)》PDF
    内容简介近年来,以ApacheSpark为代表的大数据处理框架在学术界和工业界得到了广泛的使用。本书以ApacheSpark框架为核心,总结了大数据处理框架的基础知识、核心理论、典型的Spark应用,以及相关的性能和可靠性问题。本书分9章,主要包含四部分内容。第一部分大数据处理框架的基础知识(......
  • 2024年1月Java项目开发指南9:密码加密存储
    提前声明:你不会写这加密算法没关系啊,你会用就行。要求就是:你可以不会写这个加密算法,但是你要知道加密流程,你要会用。@ServicepublicclassPasswordEncryptor{}很好,请在service层中创建一个名字为PasswordEncryptor的服务类,用来负责密码的加密。加密的方法有很多。简单一......
  • windows程序设计---使用c语言开发windows桌面应用程序
     消息机制--队列消息(常规消息鼠标,键盘等等,经过消息循环)GetMessage()得到消息--从消息队列中检索,DispatchMessage()分发消息消息机制----非对列消息-----调用特定windows程序函数触发的消息如:CreateWindow()函数被调用则发送WM_PAINT消息   windows窗口,非客户区是无......
  • ZCU106板卡 FMC接口 PCB设计注意事项
    1.无法使用JTAG问题描述:接上FMC转接板导致无法使用JTAG。原因:TDI和TDO通过一个引脚FMC_HPC1_PRSNT_M2C_B来控制通断,该引脚为高电平TDI和TDO连接在一起。FMC_HPC1_PRSNT_M2C_B默认有一个上拉电阻。但是FMC转接板一般会把H2引脚FMC_HPC1_PRSNT_M2C_B接地,导......
  • 视频监控方案设计:EasyCVR视频智能监管系统方案技术特点与应用
    随着科技的发展,视频监控平台在各个领域的应用越来越广泛。然而,当前的视频监控平台仍存在一些问题,如视频质量不高、监控范围有限、智能化程度不够等。这些问题不仅影响了监控效果,也制约了视频监控平台的发展。为了解决这些问题,TSINGSEE青犀推出的视频汇聚管理EasyCVR视频监控平台......
  • 产品解读 | 新一代湖仓集存储,多模型统一架构,高效挖掘数据价值
    星环科技TDH一直致力于给用户带来高性能、高可靠的一站式大数据基础平台,满足对海量数据的存储和复杂业务的处理需求。同时在易用性方面持续深耕,降低用户开发和运维成本,让数据处理平民化,助力用户以更便捷、高效的方式去挖掘数据价值。基于这样的宗旨,星环科技TDH正式发布了9.3版本。......