首页 > 解决方案 > Kafka - 消费者视角 - “承诺”消息解释

问题描述

关于消息的“承诺”的概念经常令人困惑。我遇到了这个,来自 https://www.confluent.io/blog/hands-free-kafka-replication-a-lesson-in-operational-simplicity/

只有在成功复制到所有同步副本后,才会提交消息。

我猜这里的“全部”是指依赖于复制因子的所有副本。说,如果复制因子是 3 ,消费者要消费这条消息,消息应该出现在所有副本(不一定是磁盘?)中,而与“acks”设置无关。希望我的理解是正确的。

在这个时间点,因为我们不是生活在理想的世界里,每件事都按预期工作:-) - 其中一个代理已关闭,并且消息由生产者发送 - 假设此消息已确认但未“提交”完全因为一个经纪人倒闭了。

假设这个代理不会永远出现(replica.lag.time.max.ms - 这个值也失效了),我们可以假设消费者默认不能收到这个消息吗?

标签: apache-kafkaconfluent-platform

解决方案


描述中的重要部分是**in-sync** replicas。不同步的副本不计算在内。

因此,如果代理关闭,它不是任何同步副本的一部分,也不会阻止将记录标记为已提交到日志。这允许经纪人移动他们的高水位线并将此记录公开给消费者。

你是对的,记录不需要被刷新到磁盘上。副本只需要获取它,它仍然可以在内存中。


推荐阅读