kafka
的 ISR
(In-Sync Replicas)机制被称为"不丢消息"机制。表示和 leader
保持同步的 follower
列表
kafka
的topic
可以设置有N个副本(replica),副本数最好要小于broker
的数量,也就是要保证一个broker
上的replica
最多有一个,这样才能用broker id
指定partition
。- 创建副本的单位是
topic
的分区,每个分区有1个leader
和0到多个follower
。
kafka
不是完全同步,也不是完全异步,是一种特殊的 ISR(In Sync Replica)。ISR
机制权衡了性能与可用性。
ISR
表示和 leader
保持同步状态的 follower
集合。这里 "同步" 的定义可以配置,默认是 follower
落后 master
的进度在 10秒 以内。
每次 follower
来拉数据时, leader
会记录各 follower
的同步进度,动态维护 ISR
。follower
落后的时长、落后的消息数、ISR
的数量都可以配置。
- 共有7条消息,
offset
(消息偏移量) 分别是 0~6 - 0 代表这个日志文件的开始
HW (High Watermark)
为4,0~3 代表这个日志文件可以消费的区间(实际上是follower
已完成同步的偏移量),消费者只能消费到这四条消息LEO
代表即将要下一个消息可插入的偏移量follower
拉取数据时,会更新leader
的HW
,消费者只能消费HW
前的数据
-
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?