文档章节

Apache Kafka源码剖析:第6篇 日志存储系列1-基本概念

强子大叔的码田
 强子大叔的码田
发布于 2017/08/13 16:04
字数 965
阅读 208
收藏 1

#程序员薪资揭榜#你做程序员几年了?月薪多少?发量还在么?>>>

下面开始将日志存储相关。

1 基本概念

kafka使用日志文件来保存生产者发送的消息。

既然是文件,就有偏移量,在kafka中,我们用术语offset来表示这个偏移量。(逻辑值而非物理值)

那么每条记录就有一个自己唯一的offset,

本质都是一样的!

既然是唯一,那么就可以跟mysql中的主键类比起来,也就是说,offset唯一确定了分区中的一条消息,

这个很简单,没啥好说的。

 

注意:上面明确说了是确定分区中的一条消息,因为消息会入到一个topic的其中1个分区里,一个topic会包含多个分区,单一分区内消息有序,分区之间不保证有序,这一点一定要注意了!

 

可能很多人用过redis,对redis的快很有体验,那么对kafka的磁盘操作是否可以这么快表示怀疑,

真相只有1个,那就是顺序IO操作,顺序IO操作到底嘛意思?就是磁盘不用花时间去寻道寻址了,否则读写磁头换来换去,把磁头累的不行了,效率还低。。。得不偿失,所以顺序IO!!!避免了随机写入带来的性能问题。

 

我们知道,topic分成多个分区partition,每个分区分成多个副本,

小贴士:
想一想mongodb和elasticsearch的存储机制,是不是很熟悉,
这就对了,技术的解决方案都是类似的。

存储一定是有状态的,只有涉及到网络的才是无状态的。

当1个分区的副本被指定到某个broker上,自然就要创建相应的文件夹了,文件夹里放日志log文件!

---

kafka中一般存储了海量数据,为了避免日志文件太大,Log不是只写成1个文件

想一想,如果只有1个文件,那得多大。。。怎么写,怎么删除?
管理都不好管理!!!

既然不是写成1个文件,那是啥?对应到磁盘上的一个目录,目录的命名规则是

topic_partitionid, log和分区是一一对应的,对应分区里的消息全部存储在这个分区目录下的日志文件里。

 

刚才说了,一个分区对应一个目录,目录里不是放一个文件,就是多个文件,每个文件我们称之为segment,分段,也就是把一个大文件拆分成多个小文件。

每个文件称之为 segment. 一个segment对应着一个日志文件和一个索引文件。

这就比较清楚了,不需要解释了!

日志文件用于记录具体的真实的消息,索引自然是为了加速,想想mysql的索引,一个意思。

随着消息的写入,段文件越来越大,到达一个阈值后,就创建新的日志文件和索引文件继续写

其实也就是产生了新的段segment文件!

 

文件名的规则是baseOffset.log,怎么理解 baseOffset?

就是本文件包含的第一条消息的offset,我们之前说了分区内消息是绝对有序的,拆分成多个segment后

单个segment也是绝对有序的,这个不需要解释了!

 

为了提高查询效率,每个日志文件对应了一个索引文件,但是,这个索引文件没有为每条消息都创建索引项,而是采用稀疏索引的方式为部分消息创建索引!

这样,找的时候,先通过二分法快速找到大致区域,然后在小范围内快速遍历,搞定!

下一节开始讲解代码!

© 著作权归作者所有

强子大叔的码田

强子大叔的码田

粉丝 923
博文 1630
码字总数 1283214
作品 9
南京
架构师
私信 提问
加载中

评论(0)

apache kafka技术分享系列(目录索引)

目录索引: Kafka使用场景 1.为何使用消息系统 2.我们为何需要搭建ApacheKafka分布式系统 3.消息队列中点对点与发布订阅区别 kafka开发与管理: 1)apachekafka消息服务 2)kafak安装与使用 ...

dannyhe
2015/09/06
802
1
Apache Beam实战指南 | 手把手教你玩转KafkaIO与Flink

https://mp.weixin.qq.com/s?biz=MzU1NDA4NjU2MA==&mid=2247492538&idx=2&sn=9a2bd9fe2d7fd681c10ebd368ef81c9c&chksm=fbea5a75cc9dd3636c148ebe6e296621d0c07132938a62f0b3643f34af414b3fd8......

osc_azsn5lm2
2018/09/05
22
0
jQuery源码剖析(四) - Deferred异步回调解决方案

jQuery 源码解析代码及更多学习干货:猛戳GitHub 本篇代码为 my-jQuery 1.0.4.js 建议阅读本篇先弄懂上一篇Callbacks 原理分析,因为Deferred异步回调是基于Callbacks。下载源码然后根据文章思...

极客James
2019/07/25
0
0
新书《深入理解Kafka:核心设计与实践原理》上架,感谢支持~

版权声明:本文为博主原创文章,未经博主朱小厮允许不得转载。 https://blog.csdn.net/u013256816/article/details/87898176 新书上架 初识 Kafka 时,笔者接触的还是 0.8.1 版本,Kafka 发展...

朱小厮
2019/02/23
0
0
源码阅读技巧篇:RocketMQ DLedger 多副本即主从切换专栏回顾

RocketMQ DLedger 多副本即主从切换专栏总共包含9篇文章,时间跨度大概为2个月的时间,笔者觉得授人以鱼不如授人以渔,借以这个系列来展示该系列的创作始末,展示笔者阅读源码的技巧。 首先在...

丁威
2019/10/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

如何用数据结构解释计算机系统 常用数据结构

详细:https://www.cnblogs.com/morui/p/10726864.html 数据结构(计算机存储、组织数据方式) 数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元...

osc_rnx2cje5
34分钟前
23
0
黑客你咋这么牛掰,不屑用鼠标?

如需快速跳转,请戳以下蓝色字条 01 前情提要 02 有苦说得出 1、黑客开发绝大多数工具是没有图形化界面的 2、命令行更有助于批量操作 3、图形化界面消耗系统资源量大,增加计算机性能负担 4、...

osc_m6gaz63w
35分钟前
20
0
计算机网络TCP/IP模型复习笔记(随时补充)

看到一篇大佬的博客,刚好前段时间也有简单了解了一点计算机网络的TCP/IP,就顺便总结一下。 大佬文章链接: https://blog.csdn.net/ThinkWon/article/details/104903925 计算机网络的自己理...

osc_boqyoaed
37分钟前
17
0
IDEA使用技巧-->查看类的继承关系图

IDEA使用技巧-->查看类的继承关系图 简单实用(很实用) 转自 ☞https://www.cnblogs.com/deng-cc/p/6927447.html 最近忙,有用的直接拿来给大家分享,但凡分享的都是我亲测有效的!...

宇宝
38分钟前
21
0
浏览器同源政策及其规避方法

自己以思维导图的形式梳理了一遍 浏览器同源政策及其规避方法

酒窝yun过去了
38分钟前
12
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部