kafka消息的可靠性

生产者ACK+记录消息失败重试

send(msg,callback)

再callback进行处理失败的消息的持久化,然后开定时任务重试

保证msg到达 broker

本质其实就是记了再发,先记日志再发送

副本同步+落盘机制

unclean.leader.election.enable = false,保证所有副本同步。

同时broker开启 同步刷盘,直接写入磁盘,而不是写入 page cache

消费者 Consume可靠消费+重试机制

开启手动ACK,拉取到本地的消息成功消费后,再提交ACK

设置 enable.auto.commit 为 false

kafka broker端,消息被消费后,不会立马被删除,而是定时删除,所以要保证Consumer消费成功手

动ACK

为什么不是直接生产者端到消费者端的可靠性?