作者回复: replica.lag.max.messages已经被移除了,不要看这篇了。你可以看看我之前写的这篇:Kafka副本管理—— 为何去掉replica.lag.max.messages参数(https://www.cnblogs.com/huxi2b/p/5903354.html)
作者回复: 没写反啊?就是想说只靠第一个条件不充分
作者回复: 配置acks=-1的生产者会等待ISR中所有副本都同步了该消息才会认为消息成功提交。确实,有些情况下生产者会等待一段时间,这通常是线上环境中producer延迟的主要诱因。至于多久则因具体场景而定了~
作者回复: 嗯嗯,这块写的是有问题。应该改成:
更新 currentHW = max(currentHW, min(leo-1, leo-2, .. leo-n))
感谢您的反馈:)
作者回复: AND
作者回复: “如果 Kafka 只判断第 1 个条件的话,就可能出现某些副本具备了“进入 ISR”的资格,但却尚未进入到 ISR 中的情况。此时,分区高水位值就可能超过 ISR 中副本 LEO,而高水位 > LEO 的情形是不被允许的” --- 所以源码中不会只判断1个条件啊
作者回复: 因为是ISR中所有副本
作者回复: 那么B副本将无法成为ISR
作者回复: 日志截断主要是因为follower必须要与leader保持一致,而一旦某个“落后”的副本成为leader,其他“领先”的follower必须与其保持一致,必须truncate掉自己多余的消息。至于如何在这个过程中保持副本间的一致,社区之前使用高水位机制,但发现有一些固有的缺陷,进而开发了leader epoch。如果你能提出更简单的算法,欢迎写下来:)
作者回复: 在所有需要回复的人当中,你的名字是我最喜欢的,没有之一:)
作者回复: epoch还有其他的作用,比如执行基本的fencing逻辑等
作者回复: 挺好的,没有什么意见:)