文档章节

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

强子1985
 强子1985
发布于 2017/08/13 16:04
字数 965
阅读 159
收藏 0

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

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也是绝对有序的,这个不需要解释了!

 

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

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

下一节开始讲解代码!

© 著作权归作者所有

共有 人打赏支持
强子1985

强子1985

粉丝 875
博文 1091
码字总数 799514
作品 8
南京
架构师
私信 提问
apache kafka技术分享系列(目录索引)

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

dannyhe
2015/09/06
453
1
分布式消息系统 Kafka 简介

Kafka是分布式发布-订阅消息系统。它最初由LinkedIn公司开发,之后成为Apache项目的一部分。Kafka是一个分布式的,可划分的,冗余备份的持久性的日志服务。它主要用于处理活跃的流式数据。 ...

大数据之路
2014/08/19
0
0
Kafka日志存储系统和offset查找逻辑

起始篇 1,kafka通过文件系统来保存和缓存处理的消息,每个发送到kafka的消息,都会被记录到日志文件中,由partition的leader记录,并由partition的follower同步。 2,kafka的消息采用顺序写...

lkforce
2017/09/05
0
0
开源 serverless 产品原理剖析(二) - Fission

背景 本文是开源 serverless 产品原理剖析系列文章的第二篇,关于 serverless 背景知识的介绍可参考文章开源 serverless 产品原理剖析(一) - Kubeless,这里不再赘述。 Fission 简介 Fiss...

吴波bruce_wu
前天
0
0
Java后端工程师学习大纲

之前自己总结过的Java后端工程师技能树,其涵盖的技术点比较全面,并非一朝一夕能够全部覆盖到的。对于一些还没有入门或者刚刚入门的Java后端工程师,如果一下子需要学习如此多的知识,想必很...

JackFace
2016/07/08
567
0

没有更多内容

加载失败,请刷新页面

加载更多

Confluence 6 文档主题合并问答

在 Confluence 官方 前期发布的消息 中,文档主题在 Confluence 6.0 及其后续版本中已经不可用。我们知道你可能对这个有很多好好奇的问题,因此我们在这里设置了一个问答用于帮助你将这个主题...

honeymose
16分钟前
1
0
传播正能量——《海南英才》阅读的读后感2200字

传播正能量——《海南英才》阅读的读后感2200字: 新华社记者12月8日从公安部获悉,针对自媒体“网络水军”敲诈勒索等违法犯罪活动突出问题,今年以来,公安部组织各地公安机关依法深入开展侦...

原创小博客
24分钟前
2
0
java框架学习日志-2

上篇文章(java框架学习日志-1)虽然跟着写了例子,也理解为什么这么写,但是有个疑问,为什么叫控制反转?控制的是什么?反转又是什么? 控制其实就是控制对象的创建。 反转与正转对应,正转...

白话
今天
5
0
Integer使用双等号比较会发生什么

话不多说,根据以下程序运行,打印的结果为什么不同? Integer a = 100;Integer b = 100;System.out.println(a == b);//print : trueInteger a = 200;Integer b = 200;System.out.pr...

兜兜毛毛
昨天
11
0
CockroachDB

百度云上的CockroachDB 云数据库 帮助文档 > 产品文档 > CockroachDB 云数据库 > 产品描述 开源NewSQL – CockroachDB在百度内部的应用与实践 嘉宾演讲视频及PPT回顾:http://suo.im/5bnORh ...

miaojiangmin
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部