broker端配置:
unclean.leader.election.enable=false
replication.factor>=3
min.insync.replicas>1
其中 replication.factor 和 min.insync.replicas 要根据实际需要更改为确切的值。
推荐:replication.factory = min.insync.replicas + 1
unclean.leader.election.enabled:设置为false,表示关闭非ISR中的副本被选举为Leader。
replication.factor:设置保存分区信息的副本的个数。
min.insync.replicas:设置消息写入到ISR的多少个副本中,才算成功。
ISR:与Leader副本同步的副本的集合。
broker:kafka server的统称(Leader、Follower)
consumer端配置:
enable.auto.commit=false
enable.auto.commit:设置为false表示关闭自动提交。
provider端配置:
block.on.buffer.full=true
acks=all
retries=Integer.MAX_VALUE
max.in.flight.requests.per.connection=1
以及 KafkaProducer.send() 参数使用回调接口Callback,Callback实现类对失败的处理要显式使用KafkaProducer.close(0)
block.on.buffer.full:设置为true,表示当内存缓冲区满了的时候,阻塞不再接收新的消息。在0.9版本之后,只需要设置 max.block.ms即可。
acks:设置为all,表示所有的follower做出响应,才算提交成功。
retries:重试的次数。
max.in.flight.requests.per.connection:设置为1,表示broker没做出响应之前,producer不能再发送消息给这个broker。
简单而言,就是这次连接的请求没有处理完,不能发送下一个请求。