java - 删除主题后的 Broker 磁盘使用情况
问题描述
我正在使用 Apache Kafka。我将巨大的数据库转储到 Kafka 中,其中每个数据库的表都是一个主题。
在主题完全消耗之前,我无法删除它。我无法设置基于时间的保留策略,因为我不知道何时会使用主题。我有有限的磁盘和太多的数据。我必须编写代码,以编程方式通过消费和删除进行编排。我知道问题出现是因为我们使用 Kafka 进行批处理,但我无法更改技术堆栈。
从代理中删除消费主题的正确方法是什么?
目前,我正在打电话kafka.admin.AdminUtils#deleteTopic
。但我找不到明确的相关文档。方法签名不包含 kafka 服务器 URL。这是否意味着我只删除了主题的元数据并且没有减少代理的磁盘使用量?那么当真正的附加日志文件删除发生时呢?
解决方案
您是否可以使用基于大小的策略,而不是使用基于时间的保留策略?log.retention.bytes
是一个每个分区的设置,可能会对您有所帮助。
我不确定您要如何确定主题已完全使用,但调用deleteTopic
该主题最初会将其标记为删除。一旦没有消费者/生产者连接到集群并访问这些主题,并且如果delete.topic.enable
在您的文件中设置为 true server.properties
,则控制器将尽快从集群中删除该主题。这包括从磁盘中清除数据。执行此操作可能需要几秒钟到几分钟的时间。
推荐阅读
- python - 使用 Python 的 AzureDataFactory 增量加载
- javascript - Javascript Switch-Case 语法让我感到困惑
- c - 如何检查命令行参数的每个字符?凯撒 PSET2
- anylogic - 版本 8 中是否可以使用 AnyLogic 结束任务抢占?
- node.js - MSSQL 登录触发器阻止 nodejs 连接
- c++ - 为什么 setPosition(xPos,yPos) 包裹在 yPos=y*40 处,其中 y = 20 (yPos=800)?
- python - Python asyncio 对等待和任务感到困惑
- c# - 如何验证视图中 bool 的值?
- javascript - 如何在一个函数中将值推送到数组并在另一个函数中读取?
- node.js - 将图片上传到aws s3后,页面重新加载图片未找到,但下次是