0

我有一个用例,我需要在单个事务中向 3 个不同的主题发送 3 条消息。问题是其中一个主题被压缩了,而且我对 Kafka 事务还很陌生,所以我不确定事务取消是如何工作的。

我的问题是:如果事务失败或中止(应用程序崩溃、异常等),实际会发生什么?中止事务的记录最终会从压缩主题的日志中删除(如空记录)吗?与非压缩主题相同吗?

谢谢。

4

1 回答 1

0

这有点晚了,但根据我的经验,Kafka 将来自中止事务的消息保留在日志中,但用特殊标记标记它们,以便使用read_committed隔离级别的消费者将它们过滤掉,但使用的消费者read_uncommitted仍然会看到它们。这可能会导致类似这样的有趣问题。

基于在消费者级别过滤中止消息的事实,我认为它们应该属于一般压缩逻辑,并且如果在主题下方存在具有相同键的消息但中止消息不应该覆盖最后提交的消息相同的密钥,因为这将违反 Kafka 为事务提供的保证。

于 2022-01-26T12:46:32.300 回答