我是Kafka的新人。从链接:http://notes.stephenholiday.com/kafka.pdf 其中提到:
每次生产者将消息发布到分区时,代理只需将消息附加到最后一个段文件。为了获得更好的性能,只有在发布了可配置数量的消息或经过了一定的时间之后,我们才会将段文件刷新到磁盘上。消息只有在刷新后才会暴露给消费者。”
现在我的问题是什么是段文件?当我用分区创建一个主题时,每个分区将有一个索引文件和一个.log文件。这个(.log文件)是段文件吗?如果是这样,那么它已经在磁盘中了,那么为什么它说“为了更好的性能,我们将段文件刷新到磁盘”。如果它正在刷新磁盘,那么它在磁盘中的哪个位置刷新?似乎在它刷新到磁盘之前,消费者无法使用它。然后我们添加了一些延迟来读取消息,但是为什么呢?还想帮助理解,当消费者想要读取一些数据时,它是从磁盘(分区、段文件)读取还是有某种缓存机制,如果有,那么数据是如何以及何时持久化到缓存中的?我不确定所有的问题是否都有效,但如果有人能澄清的话,这将有助于我理解。
1条答案
按热度按时间rur96b6h1#
您可以将此段文件视为os pagecache。
Kafka有一个非常简单的存储布局。主题的每个分区对应一个逻辑日志。在物理上,日志被实现为一组大小相等的段文件。每次生产者将消息发布到分区时,代理只需将消息附加到最后一个段文件中。段文件在可配置数量的消息发布后或经过一定时间后刷新到磁盘。消息在刷新后暴露给使用者。
另请参阅以下文件。http://kafka.apache.org/documentation/#appvsosflush
kafka总是立即将所有数据写入文件系统,并支持配置flush策略的功能,该策略控制何时使用flush将数据强制从操作系统缓存中取出并放到磁盘上。可以控制此刷新策略,以便在一段时间后或在写入一定数量的消息后将数据强制到磁盘。此配置中有多种选择。
当你看到文件系统这个词的时候不要感到困惑,os pagecache也是一个文件系统,你提到的链接实际上已经非常过时了。