关于信息的“承诺”的概念常常令人困惑。我遇到这个,来自https://www.confluent.io/blog/hands-free-kafka-replication-a-lesson-in-operational-simplicity/
只有将消息成功复制到所有同步副本后,才会提交该消息。
我猜这里的“all”是指依赖于复制因子的所有副本。例如,如果复制因子为3,则使用者要使用此消息,该消息应该出现在所有副本中(不一定是磁盘?)不考虑“acks”设置。希望我的理解是正确的。
在这个时候,由于我们不是生活在理想的世界中,在这个世界中,每件事情都按预期工作:-)-一个代理关闭,消息由生产者发送-假设此消息已确认,但由于一个代理关闭,因此没有完全“提交”。
假设这个代理不会永远出现(replica.lag.time.max.ms-这个值也失效),我们可以假设消费者在默认情况下不能接收这个消息吗?
1条答案
按热度按时间w51jfk4q1#
描述中的重要部分是
**in-sync**replicas
. 不同步的副本不计算在内。因此,如果代理关闭,它就不是任何同步副本的一部分,也不会阻止记录被标记为提交到日志。这使得经纪商可以转移他们的高水位线,并将这一记录暴露给消费者。
你说得对,记录不需要在磁盘上刷新。复制品只需要抓取它,它可能仍然在内存中。