首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >美团技术团队博客:Kafka文件存储机制那些事

美团技术团队博客:Kafka文件存储机制那些事

作者头像
美团技术团队
发布于 2018-03-12 08:14:07
发布于 2018-03-12 08:14:07
4.4K0
举报
文章被收录于专栏:美团技术团队美团技术团队

Kafka是什么

Kafka最初由Linkedin公司开发,是一个分区、多副本、多订阅者、且基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常用于web/nginx日志、访问日志,消息服务等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。

1.前言

一个商业化消息队列文件存储机制设计,是衡量其技术水平的关键指标之一。 下面将从Kafka文件存储机制和物理结构角度,分析Kafka如何实现高效文件存储,及实际应用效果。

2.Kafka文件存储机制

Kafka部分名词解释如下:

  • Broker:消息中间件处理结点,一个Kafka节点就是一个broker,多个broker可以组成一个Kafka集群。
  • Topic:一类消息,例如page view日志、click日志等都可以以topic的形式存在,Kafka集群能够同时负责多个topic的分发。
  • Partition:topic物理上的分组,一个topic可以分为多个partition,每个partition是一个有序的队列。
  • Segment:partition物理上由多个segment组成,下面2.2和2.3有详细说明。

分析过程分为以下4个步骤:

  1. topic中partition存储分布
  2. partiton中文件存储方式
  3. partiton中segment文件存储结构
  4. 在partition中如何通过offset查找message

通过上述4过程详细分析,我们就可以清楚认识到kafka文件存储机制的奥秘。

2.1 topic中partition存储分布

假设实验环境中Kafka集群只有一个broker,xxx/message-folder为数据文件存储根目录,在Kafka broker中server.properties文件配置(参数log.dirs=xxx/message-folder),例如创建2个topic名称分别为report_push、launch_info, partitions数量都为partitions=4 存储路径和目录规则为: xxx/message-folder

代码语言:javascript
AI代码解释
复制
          |--report_push-0
              |--report_push-1
              |--report_push-2
              |--report_push-3
              |--launch_info-0
              |--launch_info-1
              |--launch_info-2
              |--launch_info-3

在Kafka文件存储中,同一个topic下有多个不同partition,每个partition为一个目录,partiton命名规则为topic名称+有序序号,第一个partiton序号从0开始,序号最大值为partitions数量减1。 如果是多broker分布情况,请参考kafka集群partition分布原理分析

2.2 partiton中文件存储方式

下面示意图形象说明了partition中文件存储方式:

图1

  • 每个partion(目录)相当于一个巨型文件被平均分配到多个大小相等segment(段)数据文件中。但每个段segment file消息数量不一定相等,这种特性方便old segment file快速被删除。
  • 每个partiton只需要支持顺序读写就行了,segment文件生命周期由服务端配置参数决定。

这样做的好处是快速删除无用文件,有效提高磁盘利用率。

2.3 partiton中segment文件存储结构

读者从2.2节了解到Kafka文件系统partition存储方式,本节深入分析partion中segment file组成和物理结构。

  • segment file组成:由2大部分组成,分别为index file和data file,此2个文件一一对应,成对出现,后缀".index"和“.log”分别表示为segment索引文件、数据文件.
  • segment文件命名规则:partion全局的第一个segment从0开始,后续每个segment文件名为上一个全局partion的最大offset(偏移message数)。数值最大为64位long大小,19位数字字符长度,没有数字用0填充。

下面文件列表是笔者在Kafka broker上做的一个实验,创建一个topicXXX包含1 partition,设置每个segment大小为500MB,并启动producer向Kafka broker写入大量数据,如下图2所示segment文件列表形象说明了上述2个规则:

图2

以上述图2中一对segment file文件为例,说明segment中index<—->data file对应关系物理结构如下:

图3

上述图3中索引文件存储大量元数据,数据文件存储大量消息,索引文件中元数据指向对应数据文件中message的物理偏移地址。 其中以索引文件中元数据3,497为例,依次在数据文件中表示第3个message(在全局partiton表示第368772个message)、以及该消息的物理偏移地址为497。

从上述图3了解到segment data file由许多message组成,下面详细说明message物理结构如下:

图4

参数说明:

关键字

解释说明

8 byte offset

在parition(分区)内的每条消息都有一个有序的id号,这个id号被称为偏移(offset),它可以唯一确定每条消息在parition(分区)内的位置。即offset表示partiion的第多少message

4 byte message size

message大小

4 byte CRC32

用crc32校验message

1 byte “magic"

表示本次发布Kafka服务程序协议版本号

1 byte “attributes"

表示为独立版本、或标识压缩类型、或编码类型。

4 byte key length

表示key的长度,当key为-1时,K byte key字段不填

K byte key

可选

value bytes payload

表示实际消息数据。

2.4 在partition中如何通过offset查找message

例如读取offset=368776的message,需要通过下面2个步骤查找。

  1. 查找segment file 上述图2为例,其中00000000000000000000.index表示最开始的文件,起始偏移量(offset)为0.第二个文件00000000000000368769.index的消息量起始偏移量为368770 = 368769 + 1.同样,第三个文件00000000000000737337.index的起始偏移量为737338=737337 + 1,其他后续文件依次类推,以起始偏移量命名并排序这些文件,只要根据offset **二分查找**文件列表,就可以快速定位到具体文件。 当offset=368776时定位到00000000000000368769.index|log
  2. 通过segment file查找message 通过第一步定位到segment file,当offset=368776时,依次定位到00000000000000368769.index的元数据物理位置和00000000000000368769.log的物理偏移地址,然后再通过00000000000000368769.log顺序查找直到offset=368776为止。

从上述图3可知这样做的优点,segment index file采取稀疏索引存储方式,它减少索引文件大小,通过mmap可以直接内存操作,稀疏索引为数据文件的每个对应message设置一个元数据指针,它比稠密索引节省了更多的存储空间,但查找起来需要消耗更多的时间。

3. Kafka文件存储机制–实际运行效果

实验环境:

  • Kafka集群:由2台虚拟机组成
  • cpu:4核
  • 物理内存:8GB
  • 网卡:千兆网卡
  • jvm heap: 4GB
  • 详细Kafka服务端配置及其优化请参考:kafka server.properties配置详解

图5

从上述图5可以看出,Kafka运行时很少有大量读磁盘的操作,主要是定期批量写磁盘操作,因此操作磁盘很高效。这跟Kafka文件存储中读写message的设计是息息相关的。Kafka中读写message有如下特点:

写message

  • 消息从java堆转入page cache(即物理内存)。
  • 由异步线程刷盘,消息从page cache刷入磁盘。

读message

  • 消息直接从page cache转入socket发送出去。
  • 当从page cache没有找到相应数据时,此时会产生磁盘IO,从磁 盘Load消息到page cache,然后直接从socket发出去

4.总结

Kafka高效文件存储设计特点

  • Kafka把topic中一个parition大文件分成多个小文件段,通过多个小文件段,就容易定期清除或删除已经消费完文件,减少磁盘占用。
  • 通过索引信息可以快速定位message和确定response的最大大小。
  • 通过index元数据全部映射到memory,可以避免segment file的IO磁盘操作。
  • 通过索引文件稀疏存储,可以大幅降低index文件元数据占用空间大小。

参考

1.Linux Page Cache机制 2.Kafka官方文档

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2015-01-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 美团点评技术团队 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
面向高维度的机器学习的计算框架-Angel
简介 为支持超大维度机器学习模型运算,腾讯数据平台部与香港科技大学合作开发了面向机器学习的分布式计算框架——Angel 1.0。 Angel是使用Java语言开发的专有机器学习计算系统,用户可以像用Spark, MapReduce一样,用它来完成机器学习的模型训练。Angel已经支持了SGD、ADMM优化算法,同时我们也提供了一些常用的机器学习模型;但是如果用户有自定义需求,也可以在我们提供的最优化算法上层比较容易地封装模型。 Angel应用香港科技大学的Chukonu 作为网络解决方案, 在高维度机器学习
腾讯大数据
2018/01/26
1.2K0
谢澎涛:如何评价Eric Xing实验室做的Petuum分布式机器学习平台?
Petuum是一个专门针对机器学习的分布式平台,Spark以数据流应用为主,所以二者的应用对象不同。Spark有一个机器学习库MLLib, 但构建于数据流操作之上,并非针对机器学习算法的特点而设计。 机器学习算法和计算机领域的其他算法相比,有自己的一些独特特点。例如,(1)迭代性:模型的更新并非一次完成,需要循环迭代多次; (2)容错性:即使在每个循环中产生一些错误,模型最终的收敛不受影响;(3)参数收敛的非均匀性:模型中有些参数经过几个循环便不再改变,其他参数需要很长时间收敛。等等。这些特点决定了机器学
用户1737318
2018/06/05
1K0
研学社•架构组 | CoCoA:大规模机器学习的分布式优化通用框架
机器之心原创 作者:Yanchen Wang 参与:panda 去年,Michael I. Jordan 实验室发表论文《CoCoA: A General Framework for Communication-Efficient Distributed Optimization》提出了一种用于机器学习的分布式优化的通用框架 CoCoA。机器之心技术顾问 Yanchen Wang 对该研究进行了深度解读。 引言 在做深度学习时,现代数据集的规模必需高效的设计和开发,而且理论上算法也要进行分布式优化。分布
机器之心
2018/05/08
1.1K0
研学社•架构组 |  CoCoA:大规模机器学习的分布式优化通用框架
【重磅】新一代 Angel 正式开源,性能超越 XGBoost 和 Spark
本文介绍了Angel的架构和性能,以及它在机器学习和深度学习领域的应用。Angel是一个开源的高性能机器学习框架,由腾讯开发。它采用了协程、多GPU、多线程等技术,支持多种机器学习框架,性能超越Spark和XGBoost。Angel的GBDT、LDA、LR等算法在多个数据集上获得了出色的性能,并支持Spark、PyTorch等深度学习框架。
腾讯大数据
2017/08/24
1.6K0
【重磅】新一代 Angel 正式开源,性能超越 XGBoost 和 Spark
业界 | 腾讯正式开源高性能分布式计算平台Angel1.0,追赶同行脚步
AI 科技评论消息,腾讯的高性能分布式计算平台Angel 1.0自去年公开宣布后,今天已经正式开源。发布地址为 https://github.com/Tencent/angel,感兴趣的开发者可以下载或者贡献源码。 用于支持大规模机器学习模型运算 据 AI 科技评论了解,腾讯Angel 1.0是腾讯数据平台部与中国香港科技大学合作、北京大学参与共同开发的分布式计算框架,它的主要设计目标是为了支持超大维度的机器学习模型运算。 Angel的核心设计理念围绕模型。它将高维度的大模型切分到多个
AI科技评论
2018/03/13
9870
业界 | 腾讯正式开源高性能分布式计算平台Angel1.0,追赶同行脚步
BDTC 2014|邢波:Petuum,大数据分布式机器学习平台
【CSDN现场报道】2014年12月12-14日,由中国计算机学会(CCF)主办,CCF大数据专家委员会承办,中科院计算所与CSDN共同协办,以推进大数据科研、应用与产业发展为主旨的2014中国大数据技术大会(Big Data Technology Conference 2014,BDTC 2014)暨第二届CCF大数据学术会议在北京新云南皇冠假日酒店盛大开幕。 2014中国大数据技术大会首日全体会议中,卡耐基梅隆大学教授、ICML 2014程序主席邢波带来了名为“A New Platform for C
CSDN技术头条
2018/02/08
6230
BDTC 2014|邢波:Petuum,大数据分布式机器学习平台
基于腾讯开源 Angel 的 LDA* 入选国际顶级学术会议 VLDB
腾讯开源
2017/09/07
2.2K0
基于腾讯开源 Angel 的 LDA* 入选国际顶级学术会议 VLDB
终于有人把分布式机器学习讲明白了
分布式机器学习也称分布式学习,是指利用多个计算节点(也称工作节点,Worker)进行机器学习或者深度学习的算法和系统,旨在提高性能、保护隐私,并可扩展至更大规模的训练数据和更大的模型。
IT阅读排行榜
2023/02/13
4.6K0
终于有人把分布式机器学习讲明白了
道器相融,由 Angel 谈一个优秀机器学习平台的自我修养(下)
腾讯开源
2017/10/16
1.8K0
腾讯Angel 1.0正式版发布:基于Java与Scala的机器学习高性能计算平台
机器之心报道 Tencent 深度学习是近些年来人工智能技术发展的核心,伴随而来的机器学习框架平台也层出不穷。到现在,一家科技巨头没有一个主导的机器学习平台都不好意思跟人打招呼,比如谷歌有 TensorFlow、微软有 CNTK、Facebook 是 Torch 的坚定支持者、IBM 强推 Spark、百度开源了 PaddlePaddle、亚马逊则是 MXNet 的支持者。而为了尽可能地获得开发者支持和抢占发展先机,很多平台都选择了开源。 在去年 12 月 18 日的腾讯大数据技术峰会暨 KDD China
机器之心
2018/05/08
1.1K0
腾讯Angel 1.0正式版发布:基于Java与Scala的机器学习高性能计算平台
ICML 2018 | 腾讯AI Lab提出误差补偿式量化SGD:显著降低分布式机器学习的通信成本
作者:Jiaxiang Wu、Weidong Huang、Junzhou Huang、Tong Zhang
机器之心
2018/07/26
6790
ICML 2018 | 腾讯AI Lab提出误差补偿式量化SGD:显著降低分布式机器学习的通信成本
分布式深度学习原理、算法详细介绍
介绍 无监督的特征学习和深度学习已经证明,通过海量的数据来训练大型的模型可以大大提高模型的性能。但是,考虑需要训练的深度网络模型有数百万甚至数十亿个参数需要训练,这其实是一个非常复杂的问题。我们可以很快完成复杂模型的训练,而不用等待几天甚至几个星期的时间呢? Dean等人提出了一个可行的训练方式,使我们能够在多台物理机器上训练和serving一个模型。作者提出了两种新的方法来完成这个任务,即模型并行和数据并行。在下面的博客文章中,我们将简单地提到模型并行,因为我们主要关注数据并行的方法。 注:文章由“深度学
机器人网
2018/04/24
8390
分布式深度学习原理、算法详细介绍
分布式深度学习(I):分布式训练神经网络模型的概述
原文: Distributed Deep Learning, Part 1: An Introduction to Distributed Training of Neural Networks 作者: Alex Black、Vyacheslav Kokorin 翻译: KK4SBB 责编:何永灿,关注人工智能,投稿请联系heyc@csdn.net或微信号289416419 本文是分布式训练神经网络模型三篇系列文章的第一篇。 在第一篇文章,我们首先了解一下如何使用GPU分布式计算来显著提高深度学习模型
用户1737318
2018/06/06
3.4K0
【大数据分析 | 机器学习】分布式机器学习
  机器学习方法是计算机利用已有的数据生成某种模型,并利用此模型预测的一种方法。在确定模型结构之后,根据已知模型寻找模型参数的过程就是训练,训练过程中不断依据训练数据来迭代调整模型的参数值,从而使模型的预测结果更为准确。在现实应用中,要达到好的效果,训练数据集可能很大,模型参数量剧增,会带来很多性能和算法设计问题,单台机器难以胜任,需要分布式的机器学习架构。本文主要介绍分布式机器学习基础知识,并介绍主流的分布式机器学习框架,结合实例介绍一些机器学习算法。
Francek Chen
2025/01/22
2680
【大数据分析 | 机器学习】分布式机器学习
深度学习三十问!一位算法工程师经历30+场CV面试后总结的常见问题合集(含答案)
作者灯会为21届中部985研究生,凭借自己整理的面经,去年在腾讯优图暑期实习,七月份将入职百度cv算法工程师。在去年灰飞烟灭的算法求职季中,经过30+场不同公司以及不同部门的面试中积累出了CV总复习系列,此为深度学习上篇。
昱良
2021/07/01
9970
深度学习三十问!一位算法工程师经历30+场CV面试后总结的常见问题合集(含答案)
道器相融,由Angel谈一个优秀机器学习平台的自我修养
嘉宾:黄明 编辑:Natalie 转载自:AI前线 摘要:2017年6月,腾讯正式开源面向机器学习的第三代高性能计算平台 Angel,在GitHub上备受关注;2017年10月19日,腾讯T4专家Andymhuang(黄明)将为QCon上海的听众奉上一场Spark on Angel的精彩分享。作为Angel的主要开发者和团队负责人,同时也是Spark的早期研究者和布道者,他的工作经历可以说同步了通用大数据平台到专用机器学习平台的转变历程。因此,在这之前,InfoQ对黄明的进行了一次采访问答,他将与大家分享人
腾讯开源
2023/05/11
2820
道器相融,由Angel谈一个优秀机器学习平台的自我修养
【解析】腾讯大数据第三代高性能计算平台Angel
本月中旬,腾讯大数据在“腾讯大数据技术峰会暨KDD China技术峰会”上宣布推出面向机器学习的第三代高性能计算平台——Angel,并预计于2017年第一季度开放其源代码,鼓励业界工程师、学者和技术人员大规模学习使用,激发机器学习领域的更多创新应用与良好生态发展。 那么,Angel是如何“以己之翼、聚众之力”,如何在蓬勃发展的机器学习浪潮中展现自己的光辉,请跟随我们,走进Angel。 Angel简介 Angel是腾讯大数据部门第三代的计算平台,使用Java和Scala语言开发,面向机器学习的高性能分布式计算
腾讯大数据
2018/01/29
1.3K0
【解析】腾讯大数据第三代高性能计算平台Angel
【技术分享】Spark机器学习的加速器:Spark on Angel
Spark的核心概念是RDD,而RDD的关键特性之一是其不可变性,来规避分布式环境下复杂的各种并行问题。这个抽象,在数据分析的领域是没有问题的,它能最大化的解决分布式问题,简化各种算子的复杂度,并提供高性能的分布式数据处理运算能力。
腾讯云TI平台
2019/09/26
1.2K0
道器相融,由 Angel 谈一个优秀机器学习平台的自我修养
腾讯开源
2017/10/16
1.7K1
分布式机器学习平台大比拼(附论文)
来源:将门创投 本文长度为2575字,建议阅读4分钟 本文为你介绍分布式机器学习平台的实现方法及未来研究方向。 本文选自纽约州里大学计算机系教授Murat和学生的论文,主要介绍了分布式机器学习平台的实现方法并提出了未来的研究方向。 论文>>https://www.cse.buffalo.edu/~demirbas/publications/DistMLplat.pdf 机器学习特别是深度学习为语音识别、图像识别、自然语言处理、推荐系统和搜索引擎等领域带来的革命性的突破。这些技术将会广泛用于自动驾驶、医疗
数据派THU
2018/01/29
1.8K0
分布式机器学习平台大比拼(附论文)
推荐阅读
面向高维度的机器学习的计算框架-Angel
1.2K0
谢澎涛:如何评价Eric Xing实验室做的Petuum分布式机器学习平台?
1K0
研学社•架构组 | CoCoA:大规模机器学习的分布式优化通用框架
1.1K0
【重磅】新一代 Angel 正式开源,性能超越 XGBoost 和 Spark
1.6K0
业界 | 腾讯正式开源高性能分布式计算平台Angel1.0,追赶同行脚步
9870
BDTC 2014|邢波:Petuum,大数据分布式机器学习平台
6230
基于腾讯开源 Angel 的 LDA* 入选国际顶级学术会议 VLDB
2.2K0
终于有人把分布式机器学习讲明白了
4.6K0
道器相融,由 Angel 谈一个优秀机器学习平台的自我修养(下)
1.8K0
腾讯Angel 1.0正式版发布:基于Java与Scala的机器学习高性能计算平台
1.1K0
ICML 2018 | 腾讯AI Lab提出误差补偿式量化SGD:显著降低分布式机器学习的通信成本
6790
分布式深度学习原理、算法详细介绍
8390
分布式深度学习(I):分布式训练神经网络模型的概述
3.4K0
【大数据分析 | 机器学习】分布式机器学习
2680
深度学习三十问!一位算法工程师经历30+场CV面试后总结的常见问题合集(含答案)
9970
道器相融,由Angel谈一个优秀机器学习平台的自我修养
2820
【解析】腾讯大数据第三代高性能计算平台Angel
1.3K0
【技术分享】Spark机器学习的加速器:Spark on Angel
1.2K0
道器相融,由 Angel 谈一个优秀机器学习平台的自我修养
1.7K1
分布式机器学习平台大比拼(附论文)
1.8K0
相关推荐
面向高维度的机器学习的计算框架-Angel
更多 >
交个朋友
加入腾讯云官网粉丝站
双11活动抢先看 更有社群专属礼券掉落
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档