专栏首页加米谷大数据Kafka内部实现原理

Kafka内部实现原理

文件存储与清理

Kafka内部消息是通过Log文件存储的。每个Partition就是一个物理目录,用于存放Log文件,假设一个Topic有两个Partition,那目录名就是topic_0和topic_1。Log文件是用Log文件中第一个消息的offset命名的,比如0000000.kafka。

所有的Log文件只允许追加写入,不允许从中间插入或者对已经写入的内容作任何修改,至于原因后面会提到。

Kafka不是数据库,不可能一直存储所有的Log文件,可以通过配置清理策略进行文件清理,支持文件占用空间和生成时间进行配置。配置了清理策略后就会按照策略删除Log文件,而不是一条条删除消息。

每条消息格式

Kafka文件中每条记录的格式是8 byte offset + 4 byte 消息长度+ 消息内容。

每条消息都由多个部分组成,最开始4byte是用CRC32对消息进行校验,以防信息传输过程中,消息格式中包含时间戳信息,如果配置了按照时间删除策略,就是利用了这里的时间戳。

如果消息真实的内容只有1 byte,那么每条消息长度至少是27byte,所以大量极短的消息是不合算的。

本文分享自微信公众号 - 加米谷大数据(DtinoneBD)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-05-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 技术干货 | Hive模式设计

    过多使用分区可能导致非必须的Hadoop文件和文件夹,最终会超出NameNode对系统云数据信息的处理能力。 默认,每个task都是一个新的JVM实例,都需要开...

    加米谷大数据
  • 行业视角 | 解读《全球人工智能人才白皮书》

    人工智能行业作为未来的发展方向,其根本竞争就是人才竞争,但是中国人工智能行业人才短缺,远远不能满足市场对人才的需求。 近日,腾讯研究院和BOSS直聘联合发布了一...

    加米谷大数据
  • Redis数据存储优化机制详解

    将一个对象存储在hash类型中会占用更少的内存,并且可以更方便的存取整个对象。省内存的原因是新建一个hash对象时开始是用zipmap来存储的。这个zipmap...

    加米谷大数据
  • EMR(弹性MapReduce)入门之kafka实战(十五)

    Kafka是最初由Linkedin公司开发,是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以...

    小司机带你入门EMR
  • C++11新关键字

    auto是旧关键字,在C++11之前,auto用来声明自动变量,表明变量存储在栈,很少使用。在C++11中被赋予了新的含义和作用,用于类型推断。

    Dabelv
  • 教你Linux find命令实例教程:15个find命令用法

    在系统上查找文件或目录时,Linux上的find命令无与伦比。它使用简单,而且有许多不同的选项,可让您微调文件搜索。

    用户6543014
  • Linux/Unix shell 参数传递到SQL脚本

          在数据库运维的过程中,Shell 脚本在很大程度上为运维提供了极大的便利性。而shell 脚本参数作为变量传递给SQL以及SQL脚本也是DBA经常碰...

    Leshami
  • 欧里几德及扩展欧里几德算法

    欧几里德算法 欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。 基本算法:设a=qb+r,其中a,b,q,r都是整数,则gcd(a,b)=gcd...

    Angel_Kitty
  • 9.3 文件的读写

    系统为每一个文件设置了一个文件读写位置标记,用来指示“接下来要读写的下一个字符的 位置”

    闫小林
  • 每周学点大数据 | No.59协同过滤模型(下)

    NO.58 协同过滤模型(下) Mr. 王:是的,前面的那种加权平均的形式,我们是可以直接利用的,其中的量稍作修改即可: ? 此时式中,Sij 表示的是i 和...

    灯塔大数据

扫码关注云+社区

领取腾讯云代金券