关于维护isr的疑问

来源:10-8 面试点:Kafka Leader选举机制

乃好

2020-05-16

老师您好,在本节视频的2:50~3:10区间,有点不太明白。

您说“当我们的数据语义担保在为all的时候呢,不管是0,1,还是all的时候呢,当一条数据进入topic时,都会通知所有isr的成员,一人告诉一份,当acks为1的时候,所有的成员都返回我已经提交了才算是一个真的已经提交了,这时候会维护isr副本的一致性”


有三处有疑问,

  1. 因为听起来不太通顺,所以可能会理解有点偏差。前面说不管是0/1/all,只要有数据进来,会通知每个isr成员,一人告诉一份,这个告诉的一份,是一份什么东西?

  2. 后面又说acks为1的时候,所有成员都返回提交才算真提交。可是在生产者那章提到


当acks=1时这意味着至少要等待 leader 已经成功将数据写入本地 log,但是并没有等待所有 follower 是否成功写入。这种情况下,如果 follower 没有成功备份数据,而此时 leader又挂掉,则消息会丢失。

这里只是leader这个成员存入数据成功则就算是成功,为啥视频中说acks为1的时候要 所有成员都返回提交才算真提交?

 3. 视频开头提到kafka没有使用多数选举的一个原因是有可能follower中的数据并不是完全同步了leader中的数据,那么为什么从isr中选一个作为leader就不会发生这样的情况呢?isr列表中的东西和那些follower应该是同一个东西吧?

写回答

2回答

Quicksilver

2020-06-16

ISR是In-Sync Replicas 就是一个副本集合,里面的所有副本都是和leader保持同步的,这就是为啥要从ISR选举的原因。acks=all的时候代表消息必须写入所有副本中才认为这次消息发送成功,ack=1应该代表的是只要消息写入到一个ISR副本中,就认为消息发送成功了。

0
1
Allen
但是消息还是会发给所有的isr成员, 只不过不需要所有成员都回复而已
2020-06-17
共1条回复

Allen

2020-05-17

能提出来这些说明有认真听讲, 不过没有理解很透彻。 这个在第十三章回答面试问题的时候还会再说一遍。 每一条消息会通知ISR中的成员, 这样ISR中的成员会获得消息的第一手资料,至于ack的区别,只在于是不是需要所有的ISR回应。  Leader和follower的区别是Leader都是第一手数据, Follower是同步leader数据,而同步这种东西就有失败的可能, 所以Follower是有可能缺失一部分数据的

0
0

Kafka多维度系统精讲,从入门到实战开发

系统讲解Kafka,实战结合,让你成为使用Kafka的高手

889 学习 · 237 问题

查看课程