apache-kafka - kafka __consumer_offsets 主题日志的大小迅速增长,减少了磁盘空间
问题描述
我发现__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
相应配置。如果 2 天后您不再需要数据,请设置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
因为这可能会弄乱您的所有消费者。
推荐阅读
- php - markerclusterer 不工作 php mysql json
- python - 优化python代码以快速获得结果
- go - 当主线程循环时,goroutine中的fmt.Print *可能*不输出
- ajax - 如何使用 jquery 回调在烧瓶应用程序中显示加载圈
- angular - Angular 4 的查询生成器插件
- arrays - 如何处理 Angular 7 中数据不均匀的 JSON 对象?
- r - 如何创建应用于一组数据的函数的均值向量?
- javascript - ngif 不适用于 $scope 变量 angular
- java - 无法通过 Spark 1.6 从 Parquet Hive 表中读取数据
- android - 在 Android P 中:由于没有窗口焦点而丢弃事件:KeyEvent