回滚消息在 Kafka 主题中保留多长时间

How long a rollbacked message is kept in a Kafka topic

我在 spring 引导应用程序中实现链式事务管理器时遇到了这种情况,该应用程序与来自 JMS 的消费消息交互,然后发布到 Kafka 主题。 我的测试策略在这里解释:

简而言之,我在使用来自 MQ 的消息并将它们写入 Kafka 后故意抛出一个 RuntimeException 只是为了测试事务行为。

然而,当回滚功能运行良好时,我可以看到 Kafka 主题中未提交消息的数量永远增长,即使每次处理都发生回滚也是如此。几秒钟后,我在主题中得到了数百条未提交的消息。

我自然而然地问自己,如果一条消息被回滚了,为什么它仍然在那里占用存储空间。我知道将事务隔离设置为 read_committed 它们将永远不会被消耗,但是一次又一次地回滚毒消息耗尽你的存储空间的想法对我来说并不合适。

所以我的问题是: 我错过了什么吗?对于已回滚的消息,是否有针对 "time to live" 或类似信息的配置。我试图阅读有关此主题的 Kafka 文档,但找不到任何内容。如果这样的设置没有到位,那么处理这种情况并避免浪费存储空间的好做法是什么。

提前感谢您的意见。

这就是 Kafka 的工作方式。

发布记录总是在分区日志中占据一个位置。消费者是否可以看到该记录取决于它是否已提交(假设隔离级别为read_committed)。

Kafka 凭借其简单的日志架构实现了非凡的吞吐量。

假定回滚在某种程度上是罕见的。

如果您收到如此多的回滚,那么您的应用程序架构可能有问题。

如果您继续回滚,您可能应该关闭一段时间。

要具体回答您的问题,请参阅 log-rentention-hours

未提交记录默认保留一周