我发现__consumer_offsets
主题日志的大小正在迅速增长,并且在对其进行研究之后,进一步发现主题日志的数量最大。我更改了有关这些主题的保留策略以阻止增长率,但想增加磁盘空间并删除该__consumer_offsets
主题的所有旧日志。
但这将导致所有其他主题和消费者/生产者损坏或丢失有价值的元数据。有没有办法可以做到这一点?我正在查看配置的参数,其中包括清理策略和压缩,但不确定如何专门针对导致快速增长的主题进行指定。
https://docs.confluent.io/current/installation/configuration/topic-configs.html
感谢您的协助。
在Kafka中,有两种日志保留方式:大小和保留时间。前者由触发,log.retention.bytes
而后者由触发log.retention.hours
。
在您的情况下,您应注意保留大小,这有时可能很难配置。假设您需要delete
清理策略,则需要配置以下参数以
log.cleaner.enable=true
log.cleanup.policy=delete
然后,你需要考虑的配置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
。如果两天后您不再需要数据,请设置log.retention.hours=48
。
现在,为了更改仅适用于该__consumer_offsets
主题的保留策略,您可以简单地运行:
bin/kafka-configs.sh \
--zookeeper localhost:2181 \
--alter \
--entity-type topics \
--entity-name __consumer_offsets \
--add-config retention.bytes=...
附带说明一下,您必须非常小心的保留政策,__consumer_offsets
因为这可能会使您的所有消费者困惑。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句