Kafka最佳保留和删除政策

时间:2017-02-18 04:35:29

标签: apache-kafka kafka-consumer-api kafka-producer-api kafka-python

我对卡夫卡很新,所以请原谅我,如果这个问题是微不足道的话。我有一个非常简单的设置,用于时序测试,如下所示:

机器A - >写给主题1(经纪人) - >机器B从主题1中读取 机器B - >将消息写入主题2(经纪人) - >机器A从主题2中读取

现在我在无限循环中发送大约1400字节的消息,很快就填满了我的小经纪人的空间。我正在尝试为log.retention.ms,log.retention.bytes,log.segment.bytes和log.segment.delete.delay.ms设置不同的值。首先,我将所有值设置为允许的最小值,但似乎这降低了性能,然后我将它们设置为我的代理在完全填满之前可以采取的最大值,但是当删除发生时性能再次下降。是否有最佳做法来设置这些值以获得绝对最小延迟?

感谢您的帮助!

1 个答案:

答案 0 :(得分:5)

Apache Kafka使用日志数据结构来管理其消息。日志数据结构基本上是一组有序的段,而段是消息的集合。 Apache Kafka在Segment级别而不是Message级别提供保留。因此,Kafka继续从最终删除Segments,因为这些违反了保留政策。

Apache Kafka为我们提供了以下保留政策 -

  1. 基于时间的保留
  2. 根据此政策,我们配置段(因此消息)可以存活的最长时间。一旦Segment跨越配置的保留时间,它将被标记为删除或压缩,具体取决于配置的清理策略。细分的默认保留时间为7天。

    以下是您可以在Kafka代理属性文件中设置的参数(按优先级降序排列):

    以毫秒为单位配置保留时间

      

    log.retention.ms = 1680000

    如果未设置log.retention.ms,则使用

      

    log.retention.minutes = 1680

    如果未设置log.retention.minutes,则使用

      

    log.retention.hours = 168

    1. 基于尺寸的保留
    2. 在此策略中,我们配置主题分区的日志数据结构的最大大小。一旦日志大小达到此大小,它就会开始从其末尾删除Segments。此政策不受欢迎,因为这不能提供有关邮件到期的良好可见性。但是,在由于磁盘空间有限而需要控制日志大小的情况下,它可以派上用场。

      以下是您可以在Kafka代理属性文件中设置的参数:

      配置日志的最大大小

        

      log.retention.bytes = 104857600

      因此,根据您的使用情况,您应该配置 log.retention.bytes ,以便您的磁盘不会满。

相关问题