乐趣区

关于kafka:赵强老师Kafka的消息持久化

1、Kafka 音讯持久性概述

Kakfa 依赖文件系统来存储和缓存音讯。对于硬盘的传统观念是硬盘总是很慢,基于文件系统的架构是否提供优异的性能?实际上硬盘的快慢齐全取决于应用形式。同时 Kafka 基于 JVM 内存有以下毛病:

  • 对象的内存开销十分高,通常是要存储的数据的两倍甚至更高
  • 随着堆内数据的减少,GC 的速度越来越慢

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

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

这样实现的益处:

  • 读操作不会阻塞写操作和其余操作,数据大小不对性能产生影响
  • 硬盘空间绝对于内存空间容量限度更小
  • 线性拜访磁盘,速度快,能够保留更长的工夫,更稳固

2、Kafka 的长久化原理解析

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

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

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

退出移动版