Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache kafka 在卡夫卡主题中,回滚的消息保留多长时间_Apache Kafka_Spring Kafka - Fatal编程技术网

Apache kafka 在卡夫卡主题中,回滚的消息保留多长时间

Apache kafka 在卡夫卡主题中,回滚的消息保留多长时间,apache-kafka,spring-kafka,Apache Kafka,Spring Kafka,我在spring boot应用程序中实现链式事务管理器时遇到了这种情况,该事务管理器与来自JMS的消息交互,然后发布到Kafka主题。 我的测试策略如下所述: 简言之,在使用来自MQ的消息并将其写入Kafka以测试事务行为之后,我故意抛出了一个RuntimeException 然而,当回滚功能正常工作时,我可以看到卡夫卡主题中未提交消息的数量永远在增长,即使每次处理都会发生回滚。几秒钟后,我在主题中收到了数百条未提交的消息 我自然会问自己,如果邮件已回滚,为什么它仍会在那里存储。我知道,如果将

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

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

然而,当回滚功能正常工作时,我可以看到卡夫卡主题中未提交消息的数量永远在增长,即使每次处理都会发生回滚。几秒钟后,我在主题中收到了数百条未提交的消息

我自然会问自己,如果邮件已回滚,为什么它仍会在那里存储。我知道,如果将事务隔离设置为read_committed,它们将永远不会被使用,但一次又一次地回滚有毒消息会耗尽您的存储空间的想法对我来说并不正确

所以我的问题是: 我错过什么了吗?对于回滚的消息,是否有“生存时间”或类似的配置。我试着阅读卡夫卡关于这个主题的文档,但什么也找不到。如果这样的设置不到位,那么处理这种情况并避免浪费存储空间将是一种很好的做法


提前感谢您的投入。

卡夫卡就是这样工作的

发布记录总是占用分区日志中的一段时间。消费者能否看到该记录取决于该记录是否提交(假设隔离级别为
read\u committed

Kafka由于其简单的日志结构而实现了非凡的吞吐量

回滚被认为有点罕见

如果您得到了如此多的回滚,那么您的应用程序体系结构可能有问题

如果你继续后退,你可能应该把事情关一段时间

要具体回答您的问题,请参阅


默认情况下,未提交的记录保留一周。

这正是卡夫卡的工作方式

发布记录总是占用分区日志中的一段时间。消费者能否看到该记录取决于该记录是否提交(假设隔离级别为
read\u committed

Kafka由于其简单的日志结构而实现了非凡的吞吐量

回滚被认为有点罕见

如果您得到了如此多的回滚,那么您的应用程序体系结构可能有问题

如果你继续后退,你可能应该把事情关一段时间

要具体回答您的问题,请参阅


未提交的记录默认保存一周。

不是我想听到的,只是证实了我的怀疑。回滚消息与任何其他消息一样保留在日志中。我同意架构应该处理这个问题,但仍然认为未提交的消息应该保存在事务日志中,而不是持久日志中。即使这种体系结构对未提交的数据使用持久日志,我认为这是不好的,我仍然会添加对类似
rollbacked.cleanup.interval
的支持。最重要的是,考虑到我的制作人是幂等的,我只希望得到一条消息,而不是一条消息。但你的回答是正确的,不是我想听的,而是证实了我的怀疑。回滚消息与任何其他消息一样保留在日志中。我同意架构应该处理这个问题,但仍然认为未提交的消息应该保存在事务日志中,而不是持久日志中。即使这种体系结构对未提交的数据使用持久日志,我认为这是不好的,我仍然会添加对类似
rollbacked.cleanup.interval
的支持。最重要的是,考虑到我的制作人是幂等的,我只希望得到一条消息,而不是一条消息。但你的回答是正确的。