我想我理解幂等性意味着日志中的“每条消息都写一次”,但是在谈到 EOS(Exactly-Once Delivery Semantic)时,消费者也发挥了作用并进入了端到端的保证。
因此,正如此处所述(例如),幂等性和事务对于“端到端完全一次语义”来说是必要的并且足够了。
但是,关于压缩的 Kafka文档说:
由于数据以压缩格式存储在代理上,因此有效的提取偏移量是压缩的消息边界。因此,对于压缩数据,消耗的偏移量将一次提前一个压缩消息。这具有在消费者失败的情况下可能重复的副作用。
问题:
- 即使生产者是幂等的并且消费者在 Kafka 中是事务性的(例如 Kafka Streams),我也可能会看到重复,因为偏移量在压缩消息边界上是先进的。考虑处理不在压缩消息边界的单个消息:偏移量未提前,因此如果消费者失败,我将看到重复消息。正确的?
似乎启用压缩可能会使 EOS 的努力无效。我在讨论 EOS 的文章中没有提到这一点。