当 ISR 关闭但消息写入 leader 时会发生什么

What happens when ISR are down but message was written in leader

当向所有 ISR 副本写入消息失败,但消息已持久保存在领导者上时,会发生什么?

即使请求失败,数据是否仍然可供消费者使用?

消费者是否能够读取“未提交”的数据?

在主题配置 min.insync.replicas 完成之前,消息对 KafkaConsumer 不可见。

Kafka 期待失败的副本代理重新启动并 运行,这样复制就可以完成。

请注意,仅当您的 KafkaProducer 配置 acks 设置为 all 时,此场景才相关。当你设置为0或1时,Consumer将在数据到达partition leader后立即消费消息。

通常,客户端(此处为 KafkaProducer)仅与分区领导者通信,并根据其模式(如同步、异步或即发即弃)及其 acks 配置等待或不等待回复。数据本身的复制独立于生产者,由分区领导代理上的(单线程)处理。领导者只会通知复制成功或失败,leader/replicas 继续确保满足主题配置 replication.factor.

的复制集

如果消息仅被生产者确认而不被副本确认,生产者可能仍会尝试重新发送消息,这取决于其 acks 设置以及异常是否可重试。在那种情况下,您最终会得到重复的值。您可以通过启用幂等性来避免这种情况。