请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于维护isr的疑问

老师您好,在本节视频的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应该是同一个东西吧?

正在回答 回答被采纳积分+3

2回答

Quicksilver 2020-06-16 22:56:34

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

0 回复 有任何疑惑可以回复我~
  • Allen #1
    但是消息还是会发给所有的isr成员, 只不过不需要所有成员都回复而已
    回复 有任何疑惑可以回复我~ 2020-06-17 14:30:25
Allen 2020-05-17 21:50:18

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

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信