详细解析kafka之kafka分区和副本 (3)

前面说到follower副本的任务,就是从leader副本拉取消息,如果持续拉取速度慢于leader副本写入速度,慢于时间超过replica.lag.time.max.ms后,它就变成“非同步”副本,就会被踢出ISR副本集合中。但后面如何follower副本的速度慢慢提上来,那就又可能会重新加入ISR副本集合中了。

producer的acks参数

前面说了那么多理论的知识,那么就可以来看看如何在实际应用中使用这些知识。

跟副本关系最大的,那自然就是acks机制,acks决定了生产者如何在性能与数据可靠之间做取舍。

配置acks的代码其实很简单,只需要在新建producer的时候多加一个配置:

val properties = new Properties() ...... props.put("acks", "0/1/-1"); //配置acks,有三个可选值 ......其他配置 val producer = new KafkaProducer[String, String](properties)

acks这个配置可以指定三个值,分别是0,1和-1。我们分别来说三者代表什么:

acks为0:这意味着producer发送数据后,不会等待broker确认,直接发送下一条数据,性能最快

acks为1:为1意味着producer发送数据后,需要等待leader副本确认接收后,才会发送下一条数据,性能中等

acks为-1:这个代表的是all,意味着发送的消息写入所有的ISR集合中的副本(注意不是全部副本)后,才会发送下一条数据,性能最慢,但可靠性最强

还有一点值得一提,kafka有一个配置参数,min.insync.replicas,默认是1(也就是只有leader,实际生产应该调高),该属性规定了最小的ISR数。这意味着当acks为-1(即all)的时候,这个参数规定了必须写入的ISR集中的副本数,如果没达到,那么producer会产生异常。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zygjjs.html