Apache kafka Kafka log.segment.bytes vs log.retention.hours

Apache kafka Kafka log.segment.bytes vs log.retention.hours,apache-kafka,retention,kafka-topic,kafka-partition,Apache Kafka,Retention,Kafka Topic,Kafka Partition,我在阅读《卡夫卡:权威指南》第一版,以了解代理何时删除日志段 根据我所理解的文本,一个片段在关闭之前不符合删除的条件。只有当段达到log.segment.bytes大小时,才能关闭该段(考虑到未设置log.segment.ms)。一旦某个段符合删除条件,log.retention.ms策略将应用于最终决定何时删除此段 然而,这似乎与我在生产集群中看到的行为相矛盾(卡夫卡2.5版) 只要满足log.retention.ms,日志段就会被删除,即使段大小小于log.segment.bytes [20

我在阅读《卡夫卡:权威指南》第一版,以了解代理何时删除日志段

根据我所理解的文本,一个片段在关闭之前不符合删除的条件。只有当段达到log.segment.bytes大小时,才能关闭该段(考虑到未设置log.segment.ms)。一旦某个段符合删除条件,log.retention.ms策略将应用于最终决定何时删除此段

然而,这似乎与我在生产集群中看到的行为相矛盾(卡夫卡2.5版)

只要满足log.retention.ms,日志段就会被删除,即使段大小小于log.segment.bytes

[2020-12-24 15:51:17808]信息[日志分区=主题2, dir=/Folder/Kafka_data/Kafka]找到了带基的可删除段 因保留时间604800000ms而导致的偏移量[165828] (kafka.log.log)

[2020-12-24 15:51:17808]信息[日志分区=主题2, dir=/Folder/Kafka_data/Kafka]计划删除段 列表(日志段(baseOffset=165828,大小=8954171,), lastModifiedTime=1608220234000,largestTime=1608220234478)) (kafka.log.log)

大小仍然小于1GB,但该段已被删除

该书在新闻发布时提到卡夫卡版本为0.9.0.1。在后来的卡夫卡版本中,这种设置也发生了变化。(我在卡夫卡文件中找不到任何关于这一变化的具体提及)。下面是这本书的片段


你观察到的是预期的行为,也是。简而言之,如果您有一个活动段尚未满,并且
retention.ms
已过,则它将被关闭并变为“旧日志段”,即使它尚未满。

希望这一点变得更清楚

segment.ms=>段文件的最长期限(从 (创作)

retention.ms=>段中任何邮件的最长期限(即 已关闭),超过该段可删除(如果删除 策略(已设置)

因此,如果该段是“活动段”,则可以根据segment.ms(或segment.bytes)而不是retention.ms对其进行滚动。保留功能仅在关闭(非活动)段上起作用

所以书中引用的行为是正确的。但是,您认为该段处于活动状态,并且信息日志指定该段已设置为删除。 这不能发生在活动段上(假设没有bug)。在任何保留。*属性生效之前,必须关闭段(非活动)


请参阅。

此主题的实际分段大小是多少?您可以使用命令
$KAFKA_HOME/bin/KAFKA-configs.sh--引导服务器:9092--实体类型主题--实体名称我的主题--描述--所有| grep segment.bytes
segment.bytes=1073741824 sensitive=false同义词={STATIC_BROKER_配置:log.segment.bytes=1073741824,默认配置:log.segment.bytes=1073741824},因此,所有链接都默认为1GB。。我不能立刻真正理解,但经过多次阅读,我想我明白了(希望如此)。关于日志只有在关闭时才能删除的语句为true。有一个配置“segment.ms”,默认为7天。因此,我的日志正在滚动。对于“retention.ms”(在我的情况下是7天)空闲的已关闭日志,可以删除。[忽略大小,因为在我的情况下它小于1GB]希望这是有意义的,@fvaleri,confirmI认为您完全理解了它。retention.ms对删除/关闭活动段没有影响。请看我的答案。