消息队列中生产端确认、Broker 持久化和消费者可见性三者的状态边界如何定义?
进阶版来源:jd高级工程师Kafka消息可见性Kafka生产确认机制重复消费与消息丢失消息队列端到端一致性
草稿
答案解析
可以把它们看成三个不同的问题: Broker 是否接受了消息、消息是否具备故障恢复能力、消费者是否已经能读到消息 ,不能把它们都等同于“消息成功”。
生产端确认 :表示生产者收到了 Broker 对发送结果的确认。它的实际含义取决于确认策略:可能只代表消息已被 Leader 接收,也可能要求副本确认,或等待更强的持久化条件。确认包丢失时,消息可能已经写入但生产者认为失败并重试,因此仍要考虑重复投递和幂等。 Broker 持久化 :表示消息达到约定的故障恢复边界。它可能指写入操作系统页缓存,也可能要求刷盘;在复制型系统中,还可能要求一定数量的副本确认。因而“已持久化”具体能抵御哪些故障,要看刷盘策略、复制策略和确认配置,不能仅凭收到生产端确认推断。 消费者可见 :表示消息已经满足该系统的读取条件,消费者可以拉取或收到它。这通常不代表消费者已经处理成功,更不代表业务结果已提交。事务消息、分区提交边界或队列路由规则等,也可能让消息暂时不可见。
这三个边界在实现上不一定严格按“确认→持久化→可见”依次发生:消费者可能在生产者收到确认前就读到消息;也可能生产
登录后查看完整内容
