kafka 保證消息不丟失。原因如下有:
1)生產者如果異步發送,會造成消息丟失,發送的過程中kafka會先把消息緩存起來。然后批量發送。 若批量發送之前client宕機會造成消息丟失。生產者不丟失消息需要同步發送
2)kafka服務器默認異步刷盤,先刷到系統頁緩存,然后再刷新到日志文件。頁緩存的數據可能會丟失。解決可以同步的方式刷盤,但是這樣效率很低,比rabbitmq低。
對於我說的第二點有點問題。在配置ack=all , min.insync.replas > 1 是可以保證頁緩存數據不丟失。
3)關閉自動提交
4)unclean.leader = false
