Java面试谈谈你对Kafka数据存储?7年架构师...

谈谈你对Kafka数据存储原理的理解。

Java面试题解析。一位5年工作经验的小伙伴,面试的时候被问到这样一个问题。谈谈你对Kafka数据存储原理的理解。这位小伙伴一时间没有回答上来,那么今天我给大家来聊一聊我对这个问题的理解。另外我把往期分享的视频全部整理成了一份20万字的文档,后续还会连更,希望能够以此来提高各位粉的面试通遇率。

想获取的小伙伴,可以在我的个人煮叶简介中找到。

面试题:谈谈你对Kafka数据存储原理的理解?

要了解Kafka的数据存储原理。我从以下5个方面来分析。分别是:Topic主题。

第一点,cna副本。

第二点,Segment分片。Segment分段以及Index索引。

首先来看Topic主题。在Kafka中用来存储消息的队列叫做Topic,它是一个逻辑的概念,也可以理解是生产者和Topic以及Topic和消费者的关系都是多对多。生产者可以发送消息到多个Topic,也可以从多个Topic去获取消息。

如图所示,生产者发送消息的时候酒如果Topic不存在,Kafka默认会自动创建。

药水为了实现横向扩展,它会把不同的数据存储在不同的Broker上。

为了去降低单台服务器的访问压力,它会把一个Topic的数据分割成多个Partitior,也就是分段。

那么在服务器上每个Partition都有一个物理目录,Topic名字后面的数字,每个crushtion都有一个物理目录,在Topic的名字后面加上一个数字标号,也就是代表分区的标号。

比如说我们创建一个名为mytopic的主题,它的数据目录被分布到了3台机器,如图所示mytopic-0存在A节点。

第三点,

sine。

为了提高分区的可靠性,又设计了一个副本机制。我们在创建Topic的时候,可以通过指定抗凝on-最小副本因子来确定Topic的副本数。

副本因子数必需要小于等于节点数,否则就会报错。这样就可以去保证绝对不会有一个分,绝对不会有一个分区的两个副本,分布在同一个节点上,不然就失去了副本的意义了。

我创建了一个3个分区3个副本的,它的名字叫做a3part3,back。

它被均匀的分布到了3个Broker节点上,每个Broker节点互为备份。那么在这些所有的副本中又有两个角色,一个叫做Leader,个叫做Follower。Leader是负责对外提供读写的服务。而Follower它的维一任务就是从Leader中去异步拉取数据,如图中所示,红色的副本为Le,也被均匀的分布在各个节点上。这样设计就可以去保证读写的均匀,也被称之为单调读一致性。

第四点,g-4Segment分段。

接下来就是分段。

为了防止数据的不断追加,从而去影响检索的效率。

那么当我们的Woodtion超出一定大小的时候,就会被切割为多个Segment来组织数据。那么在磁盘上每个显著性ment,由一个log文件和2个index文件来组成。这3个文件是成套出现的。

最后点,index是用来存储我们Consumer的OffData偏移量的索引文件。

timeindex存储消息时间戳的索引文件。

保存着最原始的数据文件,这些文件的名字,以切割时记录的Offset值作为文件的名字。

它的文件结构是这样子的。

通过前面的介绍,我们已经了解了Kafka的文件存储结构。我们看到有两种索引文件,一种是偏移量的索引文件,它记录的是Offset和消息在Log文件中的位置映射关系。另一种是时间戳索引文件。它记录的是时间戳和Offset的关系。

牙冠ka为了去提高检索的效率,并不会为每一条消息去建立索引,而是采用的稀疏索引。也就是说,它会隔一批消息才会去产生一条索引记录。如图所示。我们可以通过参数来设置索引的稀疏程度。

相对来说,越稠密的索引检索数据就更快。但是它会消耗更多的存储空间,越稀疏的索引占用的空间就越小。当然Kafka的时间戳索引。由于Kafka的索引文件是以Offset来命名的,这样效率就大大提升。

就是我对Kafka数据存储原理的理解,我是被编程耽误的文艺Tom。如果我的分享对你有帮助,请你动动手指,关注我,面试不再难。

展开阅读全文

页面更新:2024-03-12

标签:生产者   副本   节点   分区   索引   原理   消息   文件   时间   数据

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top