news 2026/5/9 7:26:30

Kafka架构 主题中的分区和段

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Kafka架构 主题中的分区和段

分区是隶属于主题之下的。

第一个图满足了最基本的消息的发布订阅,但是kafka是一个高吞吐量的消息队列,假如producer生产的速度远远大于consumer的消费能力,那么会造成topic下的数据堆积。

消息堆积满之后就需要扩展了,否则效率低下,于是就需要通过分区扩展了。分区的作用其实就是为了提高数据的吞吐量,提高消费能力了。有三个消费者就可以同时消费三个分区里面的数据,这样就是上面没有分区的三倍了。

如果没有分区,那么三个消费者从分区当中拉取数据,数据是有offset的,这时候offset是单调递增的,也就意味着在同一个时间点所有的consumer只能读取一条数据。

但是有三个分区,这三个分区互不影响互不打扰,每一套分区里面都有自己的offset,每个consumer消费对应分区的数据,这样同一个时间点是可以读取到3条数据。所以有三个分区是单分区的3倍吞吐量。

为了提高吞吐量和提高处理数据的能力,它们去做了多个分区。

另外的两个分区在其他broker上面

也就是说这个topic有三个分区,这三个分区尽量均匀的发布在3个broker上面。

为什么要使用分区?其实最直观的原因是为了提高kafka集群的数据吞吐能力,数据消费能力。有了分区之后就可以去启动多个消费者同时去消费不同分区中的数据来提高这样的并行度。

分区就是把kafka当中的主题分成了若干个部分,分区是一个物理概念,我们可以实实在在看到这样的目录存在。而这样的目录也会尽量去做一个均衡的处理,就像上面创建的一个主题,它会将三个分区尽量的均匀分布在每一个broker上。

partition中的文件存储

每个分区都是一个目录,test0-2都是一个一个的目录,其实也是一个分区。分区里面存储的就是消息。

在这个目录当中存储的数据文件切分为了若干个段,叫做segment。其中.log文件就是数据文件,.log存放的就是一条条的消息,这个其实存储在物理磁盘的。

一个segment默认是一个g的大小。kafka中并不是无限制的去存储历史的消息,这些消息如果无限制的存储下去对于磁盘来说是一个比较大的消耗,所以每条消息都是有个过期时间的,超过这个过期时间这条消息是要被删除掉的。

在partition当中消息是被分成了若干个segment存储的,若干个数据段。而每个segment大小默认为1G。

segment是一个逻辑的概念,因为并不存在这样segment文件,一个segment是由两个文件组成的,一个是.log文件,一个是index文件。这两个文件组成了一个segment文件。一个segment是由两个文件组成的,。

每个segment是有一个命名的编号数字,这个数字就是segment中存储的第一条消息的offset,如果要找消息可以通过名字来找在什么位置,先定位到哪个segment当中,这样就能够从1G的segment中去定位这条消息。

生产者会不断向log文件中写入,直到写满1G,这个时候就需要创建一个新的log文件了。文件中的第一个数字是这个segment中所记录的第一条消息的offset。

将log中的数据追加到文件当中

从这里可以看到log文件当中的命名是记录第一条消息的offset,也可以说是上一个segment的中记录的最后一条消息的offset+1。

创建的时间 key的大小 value的大小等等,都在这里面记录着。payload就是这条消息的本体的内容。

log文件中所记录的是消息内容。

在这个segment当中,第六条消息所对应的位置是266个字节。index里面记录的就是索引的信息。index里面不会将所有的message都记录下来,所以采用的是稀疏存储的方式,这样文件的体积会比较小。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/9 7:25:41

Transformer在量化交易中的应用:从时序预测到策略生成

1. 项目概述:当量化交易遇上生成式AI最近几年,量化交易圈和AI圈的交集越来越大。从早期的线性回归、支持向量机,到后来的梯度提升树,再到如今火遍全球的大语言模型,技术迭代的速度远超想象。我自己做量化策略开发也有十…

作者头像 李华
网站建设 2026/5/9 7:24:30

WeDLM-7B-Base参数详解:Temperature=0.3/0.7/1.2三档续写风格实测

WeDLM-7B-Base参数详解:Temperature0.3/0.7/1.2三档续写风格实测 1. 模型概述 WeDLM-7B-Base是一款基于扩散机制(Diffusion)的高性能基座语言模型,拥有70亿参数规模。该模型采用创新的并行解码技术,在标准因果注意力…

作者头像 李华
网站建设 2026/5/9 7:16:32

AI驱动Godot开发:基于MCP协议的自然语言编辑器控制实践

1. 项目概述:当AI助手学会“开”游戏引擎如果你是一名游戏开发者,或者正在用Godot引擎捣鼓点什么,那你肯定对编辑器里那些重复性的操作不陌生:创建场景、摆放节点、调整材质、编写基础脚本……这些工作虽然不复杂,但繁…

作者头像 李华
网站建设 2026/5/9 7:11:31

Java+OpenCV实现高效人脸识别系统开发指南

1. 项目概述:基于OpenCV的Java人脸识别方案人脸识别作为计算机视觉的基础应用,早已从实验室走向日常生活。从手机解锁到门禁系统,这项技术正以惊人的速度渗透各个领域。不同于Python生态的丰富教程资源,Java环境下实现人脸识别往往…

作者头像 李华
网站建设 2026/5/9 7:10:55

RWKV-7 (1.5B World)GPU算力优化部署:入门级显卡流畅运行教程

RWKV-7 (1.5B World)GPU算力优化部署:入门级显卡流畅运行教程 1. 项目概述 RWKV-7 (1.5B World)是一款专为入门级GPU优化的轻量级大语言模型,它通过独特的架构设计和参数优化,实现了在低显存设备上的流畅运行。本教程将手把手教你如何在自己…

作者头像 李华