我有一个用例,在这个用例中,我需要向单个事务中的3个不同主题发送3条消息。问题是其中一个主题是紧凑的,我对Kafka交易非常陌生,所以我不太确定事务取消是如何工作的。
我的问题是:如果事务失败或中止(应用程序崩溃、异常等),实际会发生什么?是否最终会从压缩主题的日志中删除中止事务的记录(比如空记录)?非压缩主题也是一样的吗?
谢谢。
发布于 2022-01-26 12:46:32
现在有点晚了,但根据我的经验,Kafka将消息保存在日志中,但使用特殊标记标记它们,这样使用read_committed隔离级别的用户就可以过滤掉它们,但是使用read_uncommitted的用户仍然会看到它们。这可能会导致像这这样有趣的问题。
基于中止的消息在使用者级别被过滤的事实,我认为它们应该属于一般的压缩逻辑,如果在主题的后面有一个具有相同键的消息,那么它们就会被压缩,但是中止的消息不应该用相同的键覆盖最后提交的消息,因为这违反了Kafka为事务提供的保证。
https://stackoverflow.com/questions/67258025
复制相似问题