我要描述的是我们生产集群之一中的以下情况
我们有具有HDP版本2.6.4的ambari集群
群集包括3台kafka机器-每个kafka都有5 T的磁盘
我们看到的是所有kafka磁盘都具有100%的大小,因此kafka磁盘已满,这就是所有kafka代理失败的原因
df -h /kafka
Filesystem Size Used Avail Use% Mounted on
/dev/sdb 5T 5T 23M 100% /var/kafka
Run Code Online (Sandbox Code Playgroud)
经过调查我们发现 log.retention.hours=7 days
看来清除是在7天之后进行的,也许这就是kafka磁盘即使容量很大也能100%充满的原因– 5T
我们现在想做的是–将来如何避免这种情况?
所以
我们想知道–如何避免kafka磁盘上的已满容量
为了根据磁盘大小清除kafka磁盘,我们需要在Kafka配置中设置什么-可能吗?
以及如何知道的正确值log.retention.hours?根据磁盘大小还是其他?
假设我有一个多代理(在同一主机上运行)Kafka 设置,其中包含 3 个代理和 50 个主题,每个主题配置为具有 7 个分区和 3 的复制因子。
我有 50GB 的内存用于 kafka,并确保 Kafka 日志永远不会超过这个内存量,所以我想配置我的保留策略以防止这种情况。
我已经设置了删除清理策略:
log.cleaner.enable=true
log.cleanup.policy=delete
Run Code Online (Sandbox Code Playgroud)
并且需要配置以下属性,以便每周删除数据并且永远不会耗尽内存:
log.retention.hours
log.retention.bytes
log.segment.bytes
log.retention.check.interval.ms
log.roll.hours
Run Code Online (Sandbox Code Playgroud)
这些主题包含由总大小约为 10GB 的数据库表流式传输的数据(但插入、更新或删除在这些主题中不断流式传输)。
我应该如何配置上述参数,以便每 7 天删除一次数据,并确保在需要时可以在较短的窗口中删除数据,以免内存不足?
apache-kafka ×2