Apache kafka 卡夫卡领导者副本在将数据复制到追随者副本时如何决定提高高水位线(HW)

Apache kafka 卡夫卡领导者副本在将数据复制到追随者副本时如何决定提高高水位线(HW),apache-kafka,replication,distributed-system,fault-tolerance,Apache Kafka,Replication,Distributed System,Fault Tolerance,我读过卡夫卡复制协议。我发现卡夫卡维持着利奥和霍华德。据我所知 LEO:副本看到的最新消息的偏移量 HW:最新消息的偏移量,保证每个 复制品已经看到了 卡夫卡制作人可以设置为这些确认方法 acks=0 acks=1 acks=全部 所以我的问题是领导者如何根据卡夫卡制作人使用的确认方法推进硬件 我所理解的是 对于acks=0, Leader在看到新消息时推进HW 对于acks=1, Leader在将新消息写入其本地日志时推进HW 对于acks=all, 当每个跟随者发送确认信息时,领导者推进HW

我读过卡夫卡复制协议。我发现卡夫卡维持着利奥和霍华德。据我所知

LEO:副本看到的最新消息的偏移量

HW:最新消息的偏移量,保证每个 复制品已经看到了

卡夫卡制作人可以设置为这些确认方法

  • acks=0
  • acks=1
  • acks=全部
  • 所以我的问题是领导者如何根据卡夫卡制作人使用的确认方法推进硬件

    我所理解的是

  • 对于acks=0, Leader在看到新消息时推进HW

  • 对于acks=1, Leader在将新消息写入其本地日志时推进HW

  • 对于acks=all, 当每个跟随者发送确认信息时,领导者推进HW


  • 这是正确的吗?有人能澄清这一点吗?

    通过进一步探索,我发现在代理配置中设置的硬件推进和确认方法之间没有关系。无论将什么设置为确认,先导副本都会等待所有其他跟随者在推进HW之前保留消息

    • 当acks=0和acks=1时,leader在看到消息和将消息分别持久化到其本地日志后向生产者发送ack。但在将LEO设置为HW之前,将等待所有其他副本保留该消息
    • 如果acks=all且min.insync.replica=replication factor,则在向生产者发送ack之前,领导者需要等待所有副本保留消息。只有在这种情况下,leader将HW与发送给生产者的ack同步