kafka日志索引存储及Compact压实机制深入剖析-kafka 商业环境实战

栏目: 后端 · 发布时间: 5年前

内容简介:版权声明:本套技术专栏是作者(秦凯新)平时工作的总结和升华,通过从真实商业环境抽取案例进行总结和分享,并给出商业应用的调优建议和集群环境容量规划等内容,请持续关注本套博客。版权声明:禁止转载,欢迎学习。QQ邮箱地址:1120746959@qq.com,如有任何商业交流,可随时联系。log.retention.bytes 删除前日志文件允许保存的最大值,默认是-1,表示kafka不会对log进行大小方面的限制。log.retention.hours 日志保存的时间,可以选择 hours,minutes和ms

版权声明:本套技术专栏是作者(秦凯新)平时工作的总结和升华,通过从真实商业环境抽取案例进行总结和分享,并给出商业应用的调优建议和集群环境容量规划等内容,请持续关注本套博客。版权声明:禁止转载,欢迎学习。QQ邮箱地址:1120746959@qq.com,如有任何商业交流,可随时联系。

1 kafka日志特点

  • kafka日志不是松散的结构化请求日志,错误日志或其他日志。

  • 类似于关系型数据库中的记录,只能按照时间顺序在日志尾部追加写入日志,存储的不可能是原生消息,而是消息集合或者消息batch(10版V2)。

  • 每一条日志都会被分配一个唯一的且顺序增加的记录号,作为定位该消息的位移标识。

  • kafka的日志设计都是以分区为单位进行的。

  • 对于每一个分区日志都会进一步细分为日志段(log segment file)以及日志段索引文件。每个目录下面有三个日志文件,xxx.log是消息集文件, xxx.index 偏移量索引文件 ,xxx.timeindex 时间戳索引文件:

    00000000000000000000.index  00000000000000000000.log  00000000000000000000.timeindex
    复制代码
  • kafka日志是按照topic来组织的,每个topic可以分成多个的partition。名字为 -<分区号>,即:page_visits-0。比如:有5个partition的名为page_visits的topic的目录结构为:

kafka日志索引存储及Compact压实机制深入剖析-kafka 商业环境实战
  • kafka topic 对应的 partition是分段的,每个段叫LogSegment,包括了一个数据文件和一个索引文件,下图是某个partition目录下的文件:

    kafka日志索引存储及Compact压实机制深入剖析-kafka 商业环境实战
  • 注意第二条消息368769.log表示该日止段的第一条消息位移是368769,同时也说明上一个日志段包含了368768条消息。

  • 日志段文件的大小是有上限的,默认大小是1GB,当日志段文件填满记录后,kafka会创建一组新的日志段文件和索引文件。

  • kafka 分区日志还包含.index和.timeindex。注意这里的.index索引是稀疏索引(Sparse index file),默认是日志写入大小达到4KB时,才会在.index中增加一个索引项。可以通过log.index.interval.bytes来设置这个间隔大小。

  • 索引文件的打开方式:只读模式和读写模式。当前日志段的索引文件可以以读写模式打开,非当前的日志段文件只能以只读方式打开。

  • 索引文件的大小默认值是10MB,可以通过参数log.index.size.max.bytes来设置索引文件的最大文件大小。

  • 索引文件项格式如下所示,要求每一个索引项必须占用8个字节,log.index.size.max.bytes且必须是8的整数倍,否则会回退到8的整数倍。

kafka日志索引存储及Compact压实机制深入剖析-kafka 商业环境实战
  • 举例如下:若用户需要查找相对位移为4的消息,那么首先会通过二分查找算法找到小于4的最大索引项是4597。那么kafka就会从.log文件中从4597开始查找,直到最后找到4597。如果想要增加索引项的密度。可以设置log.index.interval.bytes,默认是4KB。
kafka日志索引存储及Compact压实机制深入剖析-kafka 商业环境实战

2 日志留存清理策略

2.1 日志的留存

log.retention.bytes 删除前日志文件允许保存的最大值,默认是-1,表示kafka不会对log进行大小方面的限制。

log.retention.hours 日志保存的时间,可以选择 hours,minutes和ms。默认是7天。

2.2 日志的清理和压实Compact

针对每个消息的key进行整合,对于有相同key的的不同value值,只保留最后一个版本

kafka日志索引存储及Compact压实机制深入剖析-kafka 商业环境实战
  • log.cleanup.policty

    日志清理保存的策略只有delete和compact两种,其中delete是默认值,就是日志留存的机制决定的。另外一个是compact则解决的是压实问题。从0.10.1.0版本开始,可以同时指定两种策略:log.cleanup.policty =delete,compact 表示可以同时为Topic执行普通的留存策略,也对其执行log comaction策略。

  • log.cleaner.enable:

    表示开启日志清理机制,自0.9开始默认为true。若要使用compact,则必须设置log.cleaner.enable=true

  • log.cleaner.min.compaction.lag.ms :

    默认是0,表示除了当前日志段,所有日志段都是可以清理的。但是假如设置log.cleaner.min.compaction.lag.ms=10min,则下午2点为当前时间时,13:50之后的日志段不被清理。

2.3 日志的合并

经过一次次清理后,各个segment大小会慢慢变小。为了避免日志目录下有过多的小文件,kafka在每次日志清理后会进行小文件日志合并。kafka会保证合并后的segment大小不超过segmentSize(通过log.segments.bytes设置,默认值是1G),且对应的索引文件占用大小之和不超过maxIndexSize(可以通过broker端参数log.index.interval.bytes设置,默认值为10MB)

3 结语

愉快的周末即将结束,挣扎完后,依然需要昂首前行,辛苦成文,各自珍惜!谢谢!

版权声明:本套技术专栏是作者(秦凯新)平时工作的总结和升华,通过从真实商业环境抽取案例进行总结和分享,并给出商业应用的调优建议和集群环境容量规划等内容,请持续关注本套博客。版权声明:禁止转载,欢迎学习。QQ邮箱地址:1120746959@qq.com,如有任何商业交流,可随时联系。

秦凯新 201811252328


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

How to Think About Algorithms

How to Think About Algorithms

Jeff Edmonds / Cambridge University Press / 2008-05-19 / USD 38.99

HOW TO THINK ABOUT ALGORITHMS There are many algorithm texts that provide lots of well-polished code and proofs of correctness. Instead, this one presents insights, notations, and analogies t......一起来看看 《How to Think About Algorithms》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具