我正在使用Apache Kafka。我将大量的数据库转储到Kafka中,其中每个数据库的表都是一个主题。
我无法在主题完全使用之前将其删除。我无法设置基于时间的保留政策,因为我不知道何时消费主题。我限制了磁盘和太多数据。我必须编写将以编程方式通过消耗和删除进行编排的代码。我知道出现此问题是因为我们使用Kafka进行批处理,但是我无法更改技术堆栈。
从经纪人中删除消费主题的正确方法是什么?
当前,我正在致电kafka.admin.AdminUtils#deleteTopic
。但是我找不到清晰的相关文档。方法签名不包含kafka服务器网址。 这是否意味着我仅删除主题的元数据,并且代理的磁盘使用量没有减少?那么,何时发生真正的追加日志文件删除?
答案 0 :(得分:1)
您可以使用基于大小的策略,而不是使用基于时间的保留策略? log.retention.bytes
是一个分区设置,可能会帮助您。
我不确定您如何确定某个主题已被完全使用,但是针对该主题调用deleteTopic
最初会将其标记为删除。一旦没有消费者/生产者连接到集群并访问这些主题,并且如果delete.topic.enable
文件中的server.properties
设置为true,则控制器将尽快从集群中删除主题因为它能够做到。这包括从磁盘清除数据。可能要花几秒钟到几分钟的时间。