1.生产者端
设置acks=all,要求每条数据必须是写入到所有replica之后,才能算是写入成功
设置retries=MAX(很大的一个值,无限重试的意思),这个要求一旦写入失败,就无限重试,卡在这里
2.kafka端
给topic设置replication.factor参数,这个参数值必须大于1,要求每个partition必须有两个副本
在服务端设置min.insync.replicas参数,这个参数值必须大于1,这要求一个leader至少感知一个follwer还跟自己保持联系,没掉队,这样才能确保leader挂了还有一个follower;
3.消费者端
自动提交ack改为手动提交ack
以上,这样配置之后,至少在kafka broker端就可以在leader所在broker发生故障,进行leader切换时,数据不会丢失;