楼主: lnh2017
193 0

[ETL] Kafka消息存储机制 [推广有奖]

  • 0关注
  • 0粉丝

本科生

56%

还不是VIP/贵宾

-

威望
0
论坛币
10 个
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
923 点
帖子
51
精华
0
在线时间
9 小时
注册时间
2018-1-15
最后登录
2018-5-10

楼主
lnh2017 发表于 2018-5-8 16:41:59 |只看作者 |倒序

kafka通过topic来分主题存放数据,主题内有分区,分区可以有多个副本,分区的内部还细分为若干个segment。

所谓的分区其实就是在kafka对应存储目录下创建的文件夹,文件夹的名字是主题名加上分区编号,编号从0开始。

一、segment

所谓的segment其实就是在分区对应的文件夹下产生的文件。

一个分区会被划分成大小相等的若干segment,这样一方面保证了分区的数据被划分到多个文件中保证不会产生体积过大的文件;另一方面可以基于这些segment文件进行历史数据的删除,提高效率。

一个segment又由一个.log和一个.index文件组成。

1..log

.log文件为数据文件用来存放数据分段数据。

2..index

.index为索引文件保存对对应的.log文件的索引信息。

在.index文件中,保存了对对应.log文件的索引信息,通过查找.index文件可以获知每个存储在当前segment中的offset在.log文件中的开始位置,而每条日志有其固定格式,保存了包括offset编号、日志长度、key的长度等相关信息,通过这个固定格式中的数据可以确定出当前offset的结束位置,从而对数据进行读取。

3..命名规则

这两个文件的命名规则为:

partition全局的第一个segment从0开始,后续每个segment文件名为上一个segment文件最后一条消息的offset值,数值大小为64位,20位数字字符长度,没有数字用0填充。

二、读取数据

开始读取指定分区中某个offset对应的数据时,先根据offset和当前分区的所有segment的名称做比较,确定出数据在哪个segment中,再查找该segment的索引文件,确定当前offset在数据文件中的开始位置,最后从该位置开始读取数据文件,在根据数据格式判断结果,获取完整数据。

如果您对大数据技术感兴趣,有学习大数据相关知识的意向,学习大数据本身及时一门枯燥的技术,没有强烈的兴趣支撑,没有持续的坚韧力是很难坚持下来的,想要学好大数据就来老男孩教育吧,可以通过以下方式进行联系!

您需要登录后才可以回帖 登录 | 我要注册

GMT+8, 2018-5-11 05:56
广西快三预测号码 新疆35选7开奖走势图 江苏十一选五投注 彩票双色球开奖 喜乐彩直播
济宁娱乐城规划 江西11选5开奖直播 北京赛车pk10软件计划 pk10投注的精确计算 飞鱼直播官网
白小姐开奖直播 盈佳国际娱乐 湖南快乐十分投注 北京赛车联盟 pk10时时彩平台出租
甘肃快三开奖记录 天津快乐十分遗漏 香港一尾中特 福建体彩31选7走势图 江苏11选5跨度走势图