【问题标题】:Kafka - Consumer Perspective - "committed" message interpretationKafka - 消费者视角 - “承诺”消息解释
【发布时间】:2020-06-17 17:19:40
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: apache-kafka confluent-platform


    【解决方案1】:

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

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

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

    【讨论】:

    • 嗯。这句话“因此,如果代理关闭,它不是任何同步副本的一部分,也不会阻止将记录标记为已提交到日志。这允许代理移动其高水位线并将此记录公开给消费者。 " - 听起来我们不会真正关心副本是否不同步,不同步。即使某些副本不同步,消息也将始终提交。消费者可以从“领导者”那里获取消息,因为尽管某些副本不同步或不可用,但消息已提交?
    • 是否有办法禁止这种情况,以确保消息仅在所有副本中可用时才被使用(如来自生产者端的 acks=all)以避免不干净的领导者问题等......跨度>
    • 请添加您的输入
    猜你喜欢
    • 2017-09-23
    • 1970-01-01
    • 2017-11-09
    • 1970-01-01
    • 1970-01-01
    • 2020-08-11
    • 1970-01-01
    • 2017-10-19
    • 1970-01-01
    相关资源
    最近更新 更多