【问题标题】:Need help to understand Kafka storage需要帮助了解 Kafka 存储
【发布时间】:2018-10-15 16:12:16
【问题描述】:

我是卡夫卡的新手。来自链接:http://notes.stephenholiday.com/Kafka.pdf 提到:


"每次生产者向分区发布消息时,代理 只需将消息附加到最后一个段文件。为更好的 性能,我们只在一个 可配置的消息数量已发布或某个 时间已过。消息只暴露给消费者 刷完之后。”


现在我的问题是 这里的段文件是什么? 当我创建一个带有分区的主题时,每个分区都会有一个索引文件和一个 .log 文件。 这是(.log 文件)段文件吗?如果是这样,那么它已经在磁盘中,所以为什么它说“为了更好的性能,我们将段文件刷新到 磁盘”。如果它正在刷新到磁盘,那么它在磁盘中的哪个位置刷新? 似乎在它刷新到磁盘之前,它对消费者不可用。然后我们添加一些延迟来读取消息,但是为什么呢? 还希望帮助了解当消费者想要读取一些数据时,它是从磁盘(分区、段文件)读取还是有一些缓存机制,如果是这样,那么数据如何以及何时持久保存到缓存中? 我不确定所有问题是否有效,但它会帮助我了解是否有人可以解决它。

【问题讨论】:

  • 我有相同或相似的基本问题——日志段到底是什么?我正在查看一些 Kafka 专家的文档和预发行书籍。我缺少一个明确的细分定义,以了解我正在阅读的文档中的其余讨论。

标签: apache-kafka


【解决方案1】:

您可以将此段文件视为操作系统页面缓存。

Kafka 有一个非常简单的存储布局。主题的每个分区 对应一个逻辑日志。在物理上,日志被实现为 一组大小相等的段文件。每次制作人发布 消息到一个分区,代理只是将消息附加到 最后一个段文件。段文件在配置后刷新到磁盘 已发布或经过一定时间的消息数量。 消息在刷新后会暴露给消费者。

另外请参阅下面的文档。 http://kafka.apache.org/documentation/#appvsosflush

Kafka 总是立即将所有数据写入文件系统,并且 支持配置刷新策略的能力,该策略控制何时 数据被强制从操作系统缓存中取出并使用刷新进入磁盘。这个 可以控制刷新策略在一段时间后强制数据到磁盘 时间或在写入一定数量的消息之后。有 此配置中有多种选择。

当您看到文件系统一词时不要感到困惑,OS pagecache也是一个文件系统,您提到的链接确实非常过时。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-19
    • 2016-05-03
    • 1970-01-01
    • 2021-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多