kafka中ISR机制有什么作用?

提问者:帅平 问题分类:面试刷题
kafka中ISR机制有什么作用?
1 个回答
有个笨蛋住进我心
有个笨蛋住进我心
ISR的作用:
在一些中间件中,都有副本的概念,在不同的场景下写入数据时,要求写入副本的个数也不尽相同。例如zk中要求写入的节点个数大于一半才算成功,或者有些要求高可靠性的场景,规定写入所有副本才能算成功。而kafk的ISR可以允许生产消息时,根据自己的业务场景自行配置想要达到的效果:
1、acks=0:fire and forget,也就是我发了就算完了,后续成不成功我都不管,这种设置下消息的高可靠性几乎没有保障,但是有极大的吞吐量。
2、acks=1:写入主节点就算成功,这种设置,可以保障一定的高可靠性,也具有不错的吞吐量。
3、acks=all:也就是写入ISR中所有的副本才算成功,这种设置下,就能提供较高的高可靠性,但是吞吐量就相对较低。
我们在考虑生产消息时,ISR机制可以友好的让使用者根据自己的业务需求去设置参数,去选择自己想要达到什么程度的可靠性,而不是只提供一种可靠性选择。
ISR是动态伸缩的,可能出现follower全部都挂了,ISR中只剩下leader,那么此时设置acks=all就等价于acks=1了。这样就会对高可靠性要求的场景产生危险,那么kafka提供了参数:min.insync.replicas。这个参数可以配置最少ISR中需要多少个副本,才能继续提供写服务。如果设置为2,一旦ISR中的个数小于2,那么就不再提供写服务,牺牲一定的可用性,来保障这种高可靠的场景需求。
发布于:3个月前 (01-24) IP属地:四川省
我来回答