老师您好,在本节视频的2:50~3:10区间,有点不太明白。
您说“当我们的数据语义担保在为all的时候呢,不管是0,1,还是all的时候呢,当一条数据进入topic时,都会通知所有isr的成员,一人告诉一份,当acks为1的时候,所有的成员都返回我已经提交了才算是一个真的已经提交了,这时候会维护isr副本的一致性”
有三处有疑问,
因为听起来不太通顺,所以可能会理解有点偏差。前面说不管是0/1/all,只要有数据进来,会通知每个isr成员,一人告诉一份,这个告诉的一份,是一份什么东西?
后面又说acks为1的时候,所有成员都返回提交才算真提交。可是在生产者那章提到
当acks=1时这意味着至少要等待 leader 已经成功将数据写入本地 log,但是并没有等待所有 follower 是否成功写入。这种情况下,如果 follower 没有成功备份数据,而此时 leader又挂掉,则消息会丢失。
这里只是leader这个成员存入数据成功则就算是成功,为啥视频中说acks为1的时候要 所有成员都返回提交才算真提交?
3. 视频开头提到kafka没有使用多数选举的一个原因是有可能follower中的数据并不是完全同步了leader中的数据,那么为什么从isr中选一个作为leader就不会发生这样的情况呢?isr列表中的东西和那些follower应该是同一个东西吧?