深入理解Kafka (七) 日志处理

下面我们来说一下Kafka是怎么处理日志的。Kafka中的日志就像数据库中的记录,或者是commit log一样的日志,是按照时间顺序写入的,但是Kafka并不是直接将message直接写到日志里的,而是把消息和timestamp,version等信息一起放到record里存储的。
当然这样查找大量的数据效率就会比较低。Kafka解决查询效率的手段之一是将数据文件分段,比如有100条Message,它们的offset是从0到99。假设将数据文件分成5段,第一段为0-19,第二段为20-39,以此类推,每段放在一个单独的数据文件里面,数据文件以该段中最小的offset命名。这样在查找指定offset的Message的时候,用二分查找就可以定位到该Message在哪个段中。
数据文件分段使得可以在一个较小的数据文件中查找对应offset的Message了,但是这依然需要顺序扫描才能找到对应offset的Message。为了进一步提高查找的效率,Kafka为每个分段后的数据文件建立了索引文件,文件名与数据文件的名字是一样的,只是文件扩展名为.index。
索引文件中包含若干个索引条目,每个条目表示数据文件中一条Message的索引。索引包含两个部分(均为4个字节的数字),分别为相对offset和position。
index文件中每隔一定字节的数据建立一条索引。这样避免了索引文件占用过多的空间,从而可以将索引文件保留在内存中。但缺点是没有建立索引的Message也不能一次定位到其在数据文件的位置,从而需要做一次顺序扫描,但是这次顺序扫描的范围就很小了。
Kafka的日志处理就介绍到这里了。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 上个世纪90年年代,是一个风云变幻的时代。 政治逐渐走向稳定,经济上涌动的和今天的中国相似的创业热潮,从工作公务员...
    Fred自我迭代阅读 226评论 0 1
  • 有多少孩子的创新止于尝试? 有多少家长和孩子沟通时,惯用以上对下的权势? 有多少孩子是玩具带大的? 又有多少家长除...
    朱团辉阅读 370评论 0 7
  • 我记得很久很久之前,我和我爸坐在床边,我认真的指着手机上的国际时间,跟他讲,你这个时间千万不要给我打电话,因为那里...
    超级帅气的青春美少女阅读 477评论 4 6