【问题标题】:Disk persistence and replication?磁盘持久性和复制?
【发布时间】:2017-06-22 10:32:38
【问题描述】:

发送到 Kafka 的消息被写入磁盘并被复制 容错性。

我不确定消息何时写入磁盘,为什么需要复制(分区)以及它有什么帮助?

据说Kafka的吞吐量很高,不写入磁盘会影响性能吗?是否可以将消息仅在内存中而不在磁盘中进行配置?

【问题讨论】:

    标签: java apache-kafka


    【解决方案1】:

    Jay Kreps 的这篇博文(他在 LinkedIn 时是 Kafka 的原始架构师之一)解释了 Kafka 如何被设计为独特的提交日志,它可以“在三台廉价机器上每秒执行 200 万次写入”,并且与未以这种方式设计的传统消息代理相比,产生更高的消息传递速率。

    https://engineering.linkedin.com/kafka/benchmarking-apache-kafka-2-million-writes-second-three-cheap-machines

    Kafka 具有可配置的参数,用于控制页面缓存刷新到磁盘的频率。如果不最终写入磁盘,就无法运行 Kafka。 Kafka 还将消息缓存在内存中以提高性能,因此它可以在从内存读取时提供高吞吐量,同时仍然保证不会丢失从持久性到磁盘的消息以及用于容错的数据集群复制。

    【讨论】:

    • 其实我的主要问题是 kafka 将消息保存在磁盘中,需要复制什么?它有什么帮助?
    • 复制是为了容错,而不是性能。这意味着您不会丢失数据,并且如果服务器死机,系统会继续工作。分区(即分片)是为了性能,因为它跨多个服务器存储数据。 Kafka 同时进行复制和分区,因此您可以获得高性能和可靠性。
    • 我知道分区是为了性能。我要问的是,当 Kafka 已经将消息保存在磁盘中时,即使服务器死机,也不会丢失数据。那么为什么需要跨节点复制相同的消息/数据呢?
    • 因为磁盘也会死掉。此外,修复服务器需要一些时间,因此在服务器死机时无法读取数据。在 Kafka 中,另一台服务器会立即接管发生故障的服务器,并且不会为消费者提供服务
    • 好的,开始吧。另一个节点上的复制是否同时发生在磁盘和内存中?
    猜你喜欢
    • 2016-12-03
    • 2016-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-28
    • 2016-02-26
    • 2019-01-26
    相关资源
    最近更新 更多