代码之家  ›  专栏  ›  技术社区  ›  Giorgos Myrianthous

卡夫卡保留政策

  •  1
  • Giorgos Myrianthous  · 技术社区  · 6 年前

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

    我已设置删除清理策略:

    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
    

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

    2 回复  |  直到 6 年前
        1
  •  3
  •   Mickael Maison    6 年前

    关于时间的保留,很容易,只要把它设置为你需要的。

    对于大小保持,这并不是微不足道的,原因如下:

    1. 保留限度是最低限度的保证。这意味着如果你 log.retention.bytes 到1GB,磁盘上的可用数据将始终至少有1GB。这不包括分区所能容纳的磁盘的最大大小,只包含下限。

    2. 除了分区的数据之外,Kafka还将一些文件(主要是索引)写入磁盘。虽然这些文件通常很小(默认为10MB),但您可能必须考虑它们。

    SIZE = segment.bytes + retention.bytes
    

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

    如果要计算索引数,则还需要添加 segment.index.bytes 每个段两次(有两个索引:offset和timestamp)。

    有了3个代理和3个副本,每个代理将承载350个分区。也可能更安全,包括一个“软糖因素”,因为卡夫卡不喜欢完整的磁盘!因此,请删除磁盘总大小的5-10%,尤其是在不计算索引的情况下。

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

        2
  •  2
  •   Simon Clark    6 年前

    log.retention.hours 168 ,和 log.retention.bytes 到~ 53687091200 ,除以计划使用的主题数。 log.segment.bytes 只需确定可删除日志段中有多少字节—最旧的日志段是运行清理时将删除的内容。

    retention.ms 在每个主题级别而不是 日志保留时间