Kafka 日志保留未按预期工作

Kafka 日志保留未按预期工作

注意:我知道有很多类似的问题,已经看过它们了,但没有帮助。

我正在一个封闭的环境中运行 kafka 基准测试,我给了每个代理一个 40GB 的文件系统用于日志持久化,并且我很快就遇到了它崩溃并且无法重新启动的情况,因为该文件系统已被填满。

因此,为了避免生产中出现这种灾难性的故障,我尝试设置log.retention.bytes=10737418240(10GB)并进行测试,看看 kafka 是否会在崩溃之前删除日志

kafka 磁盘使用情况

如图所示,kafka 在超过 10GB 后没有删除任何内容(在其他测试中,它也一直达到 40 并再次崩溃)

这是我的整个 server.properties 文件:

# server settings
controlled.shutdown.enable=true
log.retention.bytes=10737418240
log.cleanup.policy=delete
log.segment.delete.delay.ms=10000
log.retention.check.interval.ms=1000
listeners=PLAINTEXT://:9092

zookeeper.connect=kafka-zookeeper:2181
zookeeper.session.timeout.ms=6000

# this must correlate to kafka's volume claim templates
log.dirs=/var/lib/kafka

# default settings for topics
auto.create.topics.enable=true
delete.topic.enable=true
num.partitions=10
offsets.topic.replication.factor=2
transaction.state.log.replication.factor=2
transaction.state.log.min.isr=2
default.replication.factor=2
# 6291456 / 1024 / 1024 = 6Mb
replica.fetch.max.bytes=6291456
# 5242880 / 1024 / 1024 = 5Mb
message.max.bytes=5242880
group.initial.rebalance.delay.ms=3000

我错过了什么?

答案1

由于此限制是在分区级别强制执行的,因此将其乘以分区数即可计算主题保留的字节数。

服务器默认属性:log.retention.bytes

― 说文档关于retention.bytes

假设您在创建主题时使用默认配置,并且您创建基准测试期间的主题,并且您正在运行一组健康的代理节点,我们可以大致在日志清理器开始丢弃旧日志段之前,估计单个代理节点上分区日志可以增长到的大小:

log.retention.bytes× num.partitions× N × default.replication.factor/ 米,

在您的配置中,它会导致其大小大于文件系统的大小:

10GB×10×N×2/M。

相关内容