怎么确保消息 100% 不丢失
到这里,总结下:
生产端:
设置重试:
props.put("retries", "10");
设置
acks=all
设置回调:
producer.send(msg, new CallBack(){...});
Broker:
内存:使用带蓄电池后备电源的缓存
cache
。Kafka
版本0.11.x
以上:支持Epoch
机制。replication.factor >= 3
: 副本数至少有 3 个。min.insync.replicas > 1
: 代表消息至少写入 2个副本才算发送成功。前提需要acks=-1
。unclean.leader.election.enable=false
: 防止不在ISR
中的Follower
被选举为Leader
。
消费端
客户端版本升级至
0.10.2
以上版本。取消自动提交
auto.commit = false
,改为手动ack
。尽量提高客户端的消费速度,消费逻辑另起线程进行处理。
发表评论 取消回复