ISR
kafka 的 ISR(In-Sync Replicas)机制被称为"不丢消息"机制。表示和 leader 保持同步的 follower 列表
kafka 的 Replica
kafka的topic可以设置有N个副本(replica),副本数最好要小于broker的数量,也就是要保证一个broker上的replica最多有一个,这样才能用broker id指定partition。创建副本的单位是
topic的分区,每个分区有1个leader和0到多个follower。
kafka 的 "同步"
kafka 不是完全同步,也不是完全异步,是一种特殊的 ISR(In Sync Replica)。ISR 机制权衡了性能与可用性。
ISR 表示和 leader 保持同步状态的 follower 集合。这里 "同步" 的定义可以配置,默认是 follower 落后 master 的进度在 10秒 以内。
每次 follower 来拉数据时, leader 会记录各 follower 的同步进度,动态维护 ISR。follower 落后的时长、落后的消息数、ISR 的数量都可以配置。
主从同步

共有7条消息,
offset(消息偏移量) 分别是 0~60 代表这个日志文件的开始
HW (High Watermark)为4,0~3 代表这个日志文件可以消费的区间(实际上是follower已完成同步的偏移量),消费者只能消费到这四条消息LEO代表即将要下一个消息可插入的偏移量follower拉取数据时,会更新leader的HW,消费者只能消费HW前的数据
acks参数
acks=0,表示不需要回复,producer不等待broker的响应,消息会被立即写入缓冲区并视为发送成功。效率最高,但是消息可能会丢。acks=1,需要一个回复,producer会等待leader broker收到消息、写入缓冲区、落盘后,才视为发送成功。acks=all/-1,需要所有节点回复,leader broker收到消息后,挂起,等待ISR列表中所有follower返回结果后,才返回。
参考
Lovisa Johansson - What does In-Sync Replicas in Apache Kafka Really Mean?
Last updated