注意:我知道有很多类似的问题,已经看过它们了,但没有帮助。
我正在一个封闭的环境中运行 kafka 基准测试,我给了每个代理一个 40GB 的文件系统用于日志持久化,并且我很快就遇到了它崩溃并且无法重新启动的情况,因为该文件系统已被填满。
因此,为了避免生产中出现这种灾难性的故障,我尝试设置log.retention.bytes=10737418240
(10GB)并进行测试,看看 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。