kafka保证消息的方案

321 阅读1分钟

kafka作为消息中间件,如何保证消息最少消费一次是面试中或者开发中经常需要考虑的问题; 1.至少消费一次(从生产者,消费者,kafka集群三个角度考虑)

生产者:生产者发送数据后可以有回调函数来检查是否发送出成功(Future);retries参数设置需要的重试次数;

消费者:关闭自动提交,开启手动提交(可能带来重复消费问题) enable.auto.commit=false;

kafka集群:

1)acks=all(保证所有副本都同步到了消息);min.insync.replicas>1( 参数的意义在于acks设置为all;设置的含义为需要保证至少大于一个的副本是存活的);replication.factor >= 3(保证至少有一个跟得上的副本);

三个参数配合使用; 一般推荐设置成 replication.factor = min.insync.replicas + 1

2)unclean.leader.election.enable = false (该参数在leader挂掉以后,不能从达不到要求的副本中选举leader)