我们建立了一个管道,该管道从一个主题读取并在另一个字段上执行groupBy
。
input
.groupBy(
(key, value) -> value.getFieldA(),
Grouped.with("TopicName", Serdes.String(), Serdes.Integer()))
.windowedBy(SessionWindows.with(ofMinutes(5)).grace(Duration.ZERO))
此步骤创建一个中间app-TopicName-repartition
主题。但是,KStream不断向Kafka发送Delete
请求。我们可以在Kafka端看到日志:
INFO [DENY] Auth request Delete on Topic:app-TopicName-repartition by User test_user (cached) (io.aiven.kafka.auth.AivenAclAuthorizer)
我们的代码中没有streams.cleanUp()
或通过管理员API进行手动删除的过程。删除请求仅针对重新分区主题,不适用于其他中间主题。该应用程序运行正常。它只是一直发送后台删除请求,因为我已将retries
设置为Integer.MAX_VALUE
。我未能调试问题。为什么KStream发出对重新分区主题的删除请求?
[更新]
据我所知,KStreams源代码在TaskManager
中调用了KafkaAdminClient.deleteRecords()
。这是我在日志文件中看到Delete
的原因吗? KStreams源代码中没有其他调用可以明确删除主题。
答案 0 :(得分:1)
是正确的。 Kafka Streams从未尝试删除主题。但是,您需要允许它清除分区主题中的数据。请注意,默认情况下,重新分区主题配置有无限的保留时间,如果Kafka Streams无法清除该主题,分区主题将无限扩展。
有关需要哪些ACL的更多详细信息,请查看文档:{{3}}