1. log.retention.hours

  • Kafka将保留消息的时间,默认168小时,即为一周;

  • 修改为更高的值,将导致特定主题使用更多的磁盘空间,另设置为非常小的值
    将使数据可用的时间更短,长时间不可用的消费者可能错过数据;

  • 允许另两个参数log.retention.minutes和log.retention.ms;

  • 此三参数都指定相同配置,即删除消息的时间,若指定多个,则较小的单元大小将优先,
    smaller unit size will take precedence;

  • 因Cli命令只允许设置为log.retention.ms版本,故我们也建议在所有配置中使用此配置;

2. log.retention.bytes

  • 另一种消息过期的方法是基于保留的消息的总字节数,并按每个分区应用;

  • 默认-1,即没限制,可混合以字节和小时为单位的保留时间,以确保日志永远
    不会超过一定的时间量,也永远不会大于一定的大小,这取决于用例或存储需求;

  • Broker Level vs Topic Level

  • broker级别的主题配置以日志为前缀,可删除它来找到等效的主题级配置;

  • 注:这些是最低限度的保证,而非硬性限制,active segment不计入字节限制,
    若段很大(1G段中每天只有几条消息),则时间限制可能比预期的要打得多;

3. Size Time Retention

LogRetentionSizeTime
  • 若同时log.retention.bytes和log.retention.hours
    指定某值,则当满足这两个条件时,可能会删除消息;

3.1. One Week of Retention

  • 要按时间指定保留时间,必须将log.retention.hours
    设置为一周,还需确保数据不会因大小而过期,如:

retention.ms = 604800000

retention.bytes = -1

3.2. Infinite Time Retention

  • 以500MB为界的无限时间保留,infinite time Retention bounded by 500MB;

  • 需将retention.bytes设置为500MB,还必须确保数据不会过期,可通过将其设置为-1来实现,如:

retention.ms = -1
retention.bytes = 524288000

4. Demonstration

./kafka-configs.sh --bootstrap-server 192.168.0.123:9092 \
	--alter --entity-type topics --entity-name product-price \
	--add-config retention.ms=-1,retention.bytes=524288000