当前位置: 首页 > article >正文

【大数据学习 | kafka高级部分】kafka的文件存储原理

在以上部分的讲解中我们知道了,kafka的使用场景就是在流式处理过程中,充当一个中间缓冲介质的作用,主要功能是将数据先放入到kafka中计算框架会自己拉取要消费和计算的数据过来,采用poll的方式完全适配自身消费速率。那么kafka的存储和hdfs的存储的区别非常清楚的就可以提现出来,hdfs更加适用于整体的存储和取出,kafka主要做的是流,数据都是按照条进行流转的,主打的是灵活和效率,那么效率提现在哪些方面上呢???

首先topic是按照分区进行划分的,因为多个分区可以将存储的数据放入到不同的机器节点上,这样起到负载均衡的作用,所以每个broker机器节点上面存储的数据都是多个topic的不同的分区的数据,这样分布式处理可以增加kafka的计算和处理能力

所以broker上面会管理很多topic的不同partition的数据,存储的结构就是以topic-partition方式进行命名的文件夹存储数据,但是随着数据的增加,单个分区的数据也会随之增多,这样管理和检索都在一个文件中也是非常低效率的,解决办法就是单个分区的数据也会切段进行存储,每个段称之为segment。

每一个段称之为一个segement。

在官网中形容的是单个日志文件的最大值,默认是1G。

这样不管找寻什么样的数据都会直接找寻相应的segment段落就行了,不管数据多大,其检索范围也不会超过1G。

但是一个G的文件检索还是比较大的,所以kafka在存储数据的时候,首先存储数据在内存中,然后将数据刷写到磁盘上,这个刷写的大小是以4K为主的。

在这个插入过程中会追加的形式存储到log文件中,并且在index和timeindex中存在稀疏的索引数据。

这个时候查询的时候就可以直接去根据文件条数命名的对应segment中查询数据。能够轻易的跳过1G的部分

在具体查询数据的时候可以根据index去log中查询数据,速度更快,效率更高

检索过程为先跳过整体segment部分,然后在segment部分找到index,根据index找到相对应偏移量位置,然后找寻log日志中的数据

以如此方式进行数据检索,这样的存储格式让检索效果更佳明显

以上只是kafka的存储方式之一,主要是为了让数据存储更加方便管理和检索


http://www.kler.cn/a/383751.html

相关文章:

  • 观察者模式(sigslot in C++)
  • Linux export命令
  • leetcode 2295.替换数组中的元素
  • 利用.NET Upgrade Assitant对项目进行升级
  • 被裁20240927 --- 嵌入式硬件开发 前篇
  • 0009.基于springboot+layui的ERP企业进销存管理系统
  • GPT-5 一年后发布?对此你有何期待?
  • 英语supremacist
  • SpringBoot、Spring、SpringMVC三者之间的关系与区别
  • xrc的比赛
  • mysql特性
  • uni生成海报并保存
  • 【MyBatis】【基于轻量型架构的WEB开发】课程 课后习题 章节测试
  • 基于C++深度优先遍历迷宫
  • 如何将数据从 AWS S3 导入到 Elastic Cloud - 第 3 部分:Elastic S3 连接器
  • Java 8 Stream用法与常见问题和解决方式
  • Redis内存管理——针对实习面试
  • Charles简单压力测试
  • Unity中RTS游戏的设计模式处理: 游戏中的对象选择和命令委托的基本框架
  • 解读JobScheduler的jobs.xml
  • 判断二叉搜索树(递归)
  • 【LeetCode】【算法】647. 回文子串
  • 卡码网KamaCoder 127. 骑士的攻击
  • 梧桐数据库之查询特定日期的套餐价格分享
  • (超级详细版)Java基础:Java常用变量详解
  • T507 buildroot linux4.9之MCP2515 can网络开发调试