我们设置log retention hours为 1 小时如下(之前设置为 72H)
使用以下 Kafka 命令行工具,我们将 kafka 设置retention.ms为1H. 我们的目标是清除主题 - 中早于 1H 的数据test_topic,因此我们使用了以下命令:
kafka-configs.sh --alter \
--zookeeper localhost:2181 \
--entity-type topics \
--entity-name topic_test \
--add-config retention.ms=3600000
Run Code Online (Sandbox Code Playgroud)
并且
kafka-topics.sh --zookeeper localhost:2181 --alter \
--topic topic_test \
--config retention.ms=3600000
Run Code Online (Sandbox Code Playgroud)
两个命令都运行没有错误。
但问题在于 Kafka 数据比 1H 还旧并且仍然存在!
实际上没有从主题topic_test分区中删除数据。我们有 HDP Kafka 集群版本 1.0x 和 ambari
我们不明白为什么关于主题的数据 -topic_test仍然存在?并且即使在我们按照已经描述的方式运行两个 cli 之后也没有减少
以下 kafka cli 有什么问题?
kafka-configs.sh --alter --zookeeper localhost:2181 --entity-type topics --entity-name topic_test --add-config retention.ms=3600000
kafka-topics.sh --zookeeper localhost:2181 --alter --topic topic_test --config retention.ms=3600000
Run Code Online (Sandbox Code Playgroud)
从 Kafkaserver.log我们可以看到以下内容
2020-07-28 14:47:27,394] INFO Processing override for entityPath: topics/topic_test with config: Map(retention.bytes -> 2165441552, retention.ms -> 3600000) (kafka.server.DynamicConfigManager)
[2020-07-28 14:47:27,397] WARN retention.ms for topic topic_test is set to 3600000. It is smaller than message.timestamp.difference.max.ms's value 9223372036854775807. This may result in frequent log rolling. (kafka.server.TopicConfigHandler)
Run Code Online (Sandbox Code Playgroud)
日志清理器仅适用于非活动(有时也称为“旧”或“干净”)段。只要所有数据都适合其大小由segment.bytes大小限制定义的活动(“脏”、“不干净”)段,就不会发生清理。
配置cleanup.policy描述如下:
“删除”或“压缩”或两者兼有的字符串。此字符串指定用于旧日志段的保留策略。默认策略(“删除”)将在达到保留时间或大小限制时丢弃旧段。“compact”设置将启用主题的日志压缩。
此外,还有segment.bytes:
此配置控制日志的段文件大小。保留和清理总是一次完成一个文件,因此更大的段大小意味着更少的文件,但对保留的粒度控制更小。
该配置segment.ms还可用于引导删除:
此配置控制了一段时间后,即使段文件未满,Kafka 也会强制日志滚动,以确保保留可以删除或压缩旧数据。
由于它默认为一周,您可能希望减少它以满足您的需要。
因此,如果您想将主题的保留时间设置为例如一小时,您可以设置:
cleanup.policy=delete
retention.ms=3600000
segment.ms=3600000
file.delete.delay.ms=1 (The time to wait before deleting a file from the filesystem)
segment.bytes=1024
Run Code Online (Sandbox Code Playgroud)
注意:我不是指retention.bytes. 这segment.bytes是一个非常不同的事情,如上所述。另外,请注意这log.retention.hours是一个集群范围的配置。因此,如果您计划为不同的主题设置不同的保留时间,这将解决它。
| 归档时间: |
|
| 查看次数: |
1883 次 |
| 最近记录: |