kafka +如何避免磁盘存储空间不足

Jud*_*udy 5 apache-kafka

我要描述的是我们生产集群之一中的以下情况

我们有具有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?根据磁盘大小还是其他?

Gio*_*ous 6

在Kafka中,日志保留有两种类型:大小和保留时间。前者由触发,log.retention.bytes而后者由触发log.retention.hours

在您的情况下,您应注意保留大小,这有时可能很难配置。假设您要使用delete清理策略,则需要配置以下参数以

log.cleaner.enable=true
log.cleanup.policy=delete
Run Code Online (Sandbox Code Playgroud)

然后,你需要考虑的配置log.retention.byteslog.segment.byteslog.retention.check.interval.ms。为此,您必须考虑以下因素:

  • log.retention.bytes对主题单个分区的最低保证,这意味着,如果您将其设置log.retention.bytes为512MB,则意味着磁盘上(每个分区)将始终具有512MB的数据。

  • 同样,如果您在任何给定时间将其设置log.retention.bytes为512MB并设置为log.retention.check.interval.ms5分钟(这是默认值),则触发保留策略之前,您将至少有 512MB数据+ 5分钟窗口内生成的数据大小。

  • 磁盘上的主题日志由段组成。段大小取决于log.segment.bytes参数。对于log.retention.bytes=1GBlog.segment.bytes=512MB,您在磁盘上将始终最多有3个段(2个达到保留的段,第3个是当前写入数据的活动段)。

最后,您应该进行数学运算并计算Kafka日志在磁盘上任何给定时间可能保留的最大大小,并相应地调整上述参数。当然,我也建议您同时设置一个时间保留策略并进行相应配置log.retention.hours。如果2天后您不再需要数据,请设置log.retention.hours=48