淺聊 kafka-如何保證生產資料不丟失方案?可用簡單
- 前述
- 直接上方案
前述
kafka資料在生產的時候,出現資料丟失的情況,在我前面的文章中有說到,如果有不清楚的,可以去翻一翻,這篇適合有一定kafka使用經驗的讀者,并且這里只做方案,就不對細節進行說明啦,有疑問不清楚的,咱們評論區見,感謝,
該方案適合對訊息有序性無要求,但需要保證訊息完整性的場景,
直接上方案
一.為提高生產速度,send采用異步發送生產,
二.Ack設定為all,也就是當所有節點都回傳確認資訊后,才是成功
三.將kafka生產者的自動重試關閉,或把次數設定0.
四.send異步發送資料重寫回呼函式,根據回呼,將發送失敗的資料以key-value(根據業務來定)形式寫入redis,其中會包括,topic,offset等資料,
五.采用定時任務,定時將redis資料重發,重發試要注意,資料一條條來,即讀一條,發一條,發成功,洗掉redis對應記錄,這樣就算是send又失敗了,這條資料也會重新寫回redis,保證了資料最總的完整性,
六.上鎖,考慮到大資料量問題,集群部署,可橫向擴展,不上鎖,這就會有分布式定時任務調度問題,即多臺機子定時任務同時在跑,導致資料重復,使用分布式鎖解決,這里有redis環境,就推薦直接使用基于redis的Redisson分布式鎖,簡單方便,快速,
這里的方案,提供一個大致的思路,更多的細節問題,可以一起探討和發現,具體的方案,一切從實際業務出發,不然就是耍流氓,但是大多思路不變,變動的是細節,
熱愛生活的碼小子wmxiang:
作業之余,記錄自己平時的一些小毛病,以及問題排查和解決方案思路,記錄自己的經驗和不足之處,筆記中可能會有很多不足之處,歡迎各位留言指正討論,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/290607.html
標籤:其他
