【问题标题】:confused about transaction logs in zookeeper对 Zookeeper 中的事务日志感到困惑
【发布时间】:2014-03-15 13:45:29
【问题描述】:

我正在研究zookeeper,所以我阅读了论文“一个简单的完全有序的广播协议”。而且我不太明白下面这句话:

“ZooKeeper 使用内存数据库并将事务日志和定期快照存储在磁盘上。Zab 的事务日志兼作数据库预写事务日志,因此事务只会被写入磁盘一次。”

有谁能给我解释一下吗?

【问题讨论】:

    标签: apache-zookeeper


    【解决方案1】:

    Zookeeper 需要将事务写入磁盘,否则如果你重新启动 Zookeeper,它会忘记它所听到的任何事务。 zookeeper 写入磁盘的方式是,zookeeper 在响应事务之前,会将事务追加到事务日志文件中。当事务日志文件达到一定大小时,会创建一个新的事务日志文件。

    写入事务日志文件本身效率不高,因为 Zookeeper 在启动时必须重播它曾经处理过的每个事务。因此,zookeeper 会定期将其内存数据库当前状态的快照写入文件。然后在启动时,zookeeper 只需要加载快照,以及自快照创建以来的所有事务日志。

    【讨论】:

    • 如果zookeeper在响应事务之前将事务追加到事务日志文件中,是不是很慢?因为写入磁盘可能需要一段时间。
    • 最佳实践是将磁盘专用于事务日志,并始终附加到事务文件,这样磁盘头几乎总是位于正确的位置,并且写入速度相当快。 Zookeeper 每秒可以处理数千笔交易。
    猜你喜欢
    • 1970-01-01
    • 2012-03-01
    • 2018-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-07
    • 2019-09-13
    相关资源
    最近更新 更多