gpt4 book ai didi

apache-kafka - Kafka 保留策略

转载 作者:行者123 更新时间:2023-12-04 23:56:06 24 4
gpt4 key购买 nike

假设我有一个多代理(在同一主机上运行)Kafka 设置,其中包含 3 个代理和 50 个主题,每个主题都配置为具有 7 个分区和 3 的复制因子。

我有 50GB 的内存用于 kafka,并确保 Kafka 日志永远不会超过这个内存量,所以我想配置我的保留策略以防止这种情况。

我已经设置了删除清理策略:

log.cleaner.enable=true
log.cleanup.policy=delete

并且需要配置以下属性,以便每周删除数据并且永远不会耗尽内存:
log.retention.hours
log.retention.bytes
log.segment.bytes
log.retention.check.interval.ms
log.roll.hours

这些主题包含由数据库上的表流式传输的数据,总大小约为 10GB(但插入、更新或删除在这些主题中不断流式传输)。

我应该如何配置上述参数,以便每 7 天删除一次数据,并确保在需要时可以在较短的窗口中删除数据,以免内存不足?

最佳答案

关于时间保留很容易,只需将其设置为您需要的即可。

对于大小保留,这并非微不足道,原因如下:

  • 保留限额是最低保证。这意味着如果您设置 log.retention.bytes到 1GB,您将始终有至少 1GB 的磁盘数据可用。这不包括分区可以占用的最大磁盘大小,仅涵盖下限。
  • 日志清理器仅定期运行(默认情况下每 5 分钟运行一次),因此在最坏的情况下,您可能会得到 1GB + 5 分钟内可写入的数据量。根据您的环境,这可能是大量数据。
  • 除了分区的数据之外,Kafka 还会将一些文件(主要是索引)写入磁盘。虽然这些文件通常很小(默认为 10MB),但您可能需要考虑它们。

  • 忽略索引,您可以用来估计分区的最大磁盘大小的一种体面的启发式方法是:
    SIZE = segment.bytes + retention.bytes

    在正常环境中,很少有所有分区同时超过其限制,因此通常可以忽略第二点。

    如果要计算索引,则还需要添加 segment.index.bytes每个段两次(有 2 个索引:偏移量和时间戳)。

    有 3 个代理和 3 个副本,每个代理将托管 350 个分区。由于 Kafka 不喜欢完整磁盘,因此包含“fudge factor”也可能更安全!因此,删除总磁盘大小的 5-10%,尤其是在不计算索引的情况下。

    考虑到所有这些问题,您应该能够找到所需的日志大小。

    关于apache-kafka - Kafka 保留策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51823569/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com