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)

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏散尽浮华

Git忽略规则.gitignore梳理

对于经常使用Git的朋友来说,.gitignore配置一定不会陌生。废话不说多了,接下来就来说说这个.gitignore的使用。 首先要强调一点,这个文件的完整...

1887
来自专栏前端小叙

前端常用linux命令

文件和目录 cd /home 进入 '/ home' 目录'  cd .. 返回上一级目录  cd ../.. 返回上两级目录  cd 进入个人的主目录  c...

3037
来自专栏人工智能LeadAI

深入理解并发/并行,阻塞/非阻塞,同步/异步

1、阻塞,非阻塞 首先,阻塞这个词来自操作系统的线程/进程的状态模型中,如下图: ? 进程状态 一个线程/进程经历的5个状态,创建,就绪,运行,阻塞,终止。各个...

4014
来自专栏后端技术探索

关于PHP脚本和浏览器连接深入解析

当 PHP 脚本正常地运行 NORMAL 状态时,连接为有效。当远程客户端中断连接时,ABORTED 状态的标记将会被打开。远程客户端连接的中断通常是由用户点击...

1881
来自专栏pangguoming

Git忽略规则.gitignore梳理

对于经常使用Git的朋友来说,.gitignore配置一定不会陌生。废话不说多了,接下来就来说说这个.gitignore的使用。

872
来自专栏码匠的流水账

java9系列(三)模块系统精要

如果A依赖B,B依赖C,B方法返回的类型是C中的类型,那么需要A也可以使用C,则需要在A中声明依赖C。不过这样子非常费劲,所以java9内置了个transiti...

1432
来自专栏抠抠空间

爬虫之FileCookieJar

1740
来自专栏xiaoheike

Elasticsearch Network Settings

Elasticsearch 缺省情况下是绑定 localhost。对于本地开发服务是足够的(如果你在相同机子上启动多个节点,它还可以形成一个集群),但是你需要配...

1502
来自专栏大内老A

ASP.NET Core管道深度剖析(2):创建一个“迷你版”的管道来模拟真实管道请求处理流程

从《ASP.NET Core管道深度剖析(1):采用管道处理HTTP请求》我们知道ASP.NET Core请求处理管道由一个服务器和一组有序的中间件组成,所以从...

2149
来自专栏hbbliyong

git各种命令介绍以及碰到的各种坑

一.各种命令介绍:  git pull:从其他的版本库(既可以是远程的也可以是本地的)将代码更新到本地,例如:'git pull origin master'就...

3598

扫码关注云+社区

领取腾讯云代金券