上篇文章讲了副本机制是什么,一文读懂kafka内部怎么运行的-CSDN博客 这里深挖下同步副本集及里面的关键参数。副本会去leader副本拉去数据追加到自己日志中。
我们知道kafka副本的作用是提高系统的高可用。当leader副本挂了时,会从候选副本集中选者一个当leader副本继续对外提供服务。那么这个候选副本其实就是同步副本集,如果副本的数据和leader副本数据差太多时,该副本会被踢出同步副本集,如果数据追上来了则又加入该副本集。那么怎么才叫差太多呢?
replica.lag.time.max.ms=10,默认10秒。如果副本超过10秒没有发起数据拉取操作,则认为该副本太落后了,剔出同步副本集。被剔除的副本叫非同步副本集。那么非同步副本集能够作为候选副本吗?答案是能。unclean.leader.election.enable=true 则表示可以从非同步副本集选择出leader副本。但是这样就可能丢失数据了,谨慎使用。
下面还有几个关键参数:
replication.factor=3 指定主题有3个副本
min.insync.replicas=3 最少同步副本集个数,当同步副本集个数大于等于该数时才算写入成功。
acks参数:消息写入时要求确认的副本个数。
acks=0时,生产者不管leader副本端的处理情况,只管发送。最高吞吐量。
acks=all或-1时,必须等到同步副本集都成功写入时,才响应成功。最高持久性,最低吞吐量。
acks=1,只需要leader broker写入成功,无需管其他副本。(默认)