【赵强老师】Kafka的持久化

【赵强老师】Kafka的持久化

1、Kafka持久化概述

Kakfa 依赖文件系统来存储和缓存消息。对于硬盘的传统观念是硬盘老是很慢,基于文件系统的架构可否提供优异的性能?实际上硬盘的快慢彻底取决于使用方式。同时 Kafka 基于 JVM 内存有如下缺点:缓存

  • 对象的内存开销很是高,一般是要存储的数据的两倍甚至更高
  • 随着堆内数据的增长,GC的速度愈来愈慢

实际上磁盘线性写入的性能远远大于任意位置写的性能,线性读写由操做系统进行了大量优化(read-ahead、write-behind 等技术),甚至比随机的内存读写更快。因此与常见的数据缓存在内存中而后刷到硬盘的设计不一样,Kafka 直接将数据写到了文件系统的日志中:架构

  • 写操做:将数据顺序追加到文件中
  • 读操做:从文件中读取

这样实现的好处:app

  • 读操做不会阻塞写操做和其余操做,数据大小不对性能产生影响
  • 硬盘空间相对于内存空间容量限制更小
  • 线性访问磁盘,速度快,能够保存更长的时间,更稳定。

2、Kafka的持久化原理解析

一个 Topic 被分红多 Partition,每一个 Partition 在存储层面是一个 append-only 日志文件,属于一个 Partition 的消息都会被直接追加到日志文件的尾部,每条消息在文件中的位置称为 offset(偏移量)。ide

【赵强老师】Kafka的持久化

以下图所示,咱们以前建立了mytopic1,具备三个分区。咱们能够到对应的日志目录下进行查看。工具

【赵强老师】Kafka的持久化

Kafka日志分为index与log(如上图所示),两个成对出现:index文件存储元数据,log存储消息。索引文件元数据指向对应log文件中message的迁移地址;例如2,128指log文件的第2条数据,偏移地址为128;而物理地址(在index文件中指定)+ 偏移地址能够定位到消息。
咱们可使用Kafka自带的工具来查看log日志文件中的数据信息:性能

【赵强老师】Kafka的持久化

【赵强老师】Kafka的持久化

相关文章
相关标签/搜索