我要描述的是我们生产集群之一中的以下情况
我们有具有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中,日志保留有两种类型:大小和保留时间。前者由触发,log.retention.bytes
而后者由触发log.retention.hours
。
在您的情况下,您应注意保留大小,这有时可能很难配置。假设您要使用delete
清理策略,则需要配置以下参数以
log.cleaner.enable=true
log.cleanup.policy=delete
Run Code Online (Sandbox Code Playgroud)
然后,你需要考虑的配置log.retention.bytes
,log.segment.bytes
和log.retention.check.interval.ms
。为此,您必须考虑以下因素:
log.retention.bytes
是对主题的单个分区的最低保证,这意味着,如果您将其设置log.retention.bytes
为512MB,则意味着磁盘上(每个分区)将始终具有512MB的数据。
同样,如果您在任何给定时间将其设置log.retention.bytes
为512MB并设置为log.retention.check.interval.ms
5分钟(这是默认值),则在触发保留策略之前,您将至少有 512MB数据+ 5分钟窗口内生成的数据大小。
磁盘上的主题日志由段组成。段大小取决于log.segment.bytes
参数。对于log.retention.bytes=1GB
和log.segment.bytes=512MB
,您在磁盘上将始终最多有3个段(2个达到保留的段,第3个是当前写入数据的活动段)。
最后,您应该进行数学运算并计算Kafka日志在磁盘上任何给定时间可能保留的最大大小,并相应地调整上述参数。当然,我也建议您同时设置一个时间保留策略并进行相应配置log.retention.hours
。如果2天后您不再需要数据,请设置log.retention.hours=48
。
归档时间: |
|
查看次数: |
3752 次 |
最近记录: |