kafka丢数据问题方案(转载+整理+汇总)
丟數據可能來自:
息生產者(Producer)、消息消費者(Consumer)和服務載體(在Kafka中用Broker指代)[6]
broker可以理解為類似于隊列api一樣的東西
[8]提供了一個腦圖
?
----------------------------------------------------------------------------------生產者--------------------------------------------------------------------------------------------------------------------------------------------------
| 參數設置 | 推薦設置 |
| request.required.acks | -1 |
| producer.send(msg,callback) | 優先使用producer.send(msg,callback) 帶回調方法 而不是producer.send(msg) 不帶回調方法 |
| retries | MAX |
| enable.idempotence | true |
| producer.type | 采用默認的sync值[5] |
?
?
-------------------------------------------------------------------------------服務端---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 變量 | 說明 | 推薦設置 |
| unclean.leader.election.enable | 這個參數是控制leader replica出問題了以后follower replica競選leader replica資格的,我們把設置為false,意思就是如果follower replica如果落后leader replica太多就不能參與競選。 | false |
| replication.factor | 這個參數設置的是partition副本的個數,如果我們要想保證數據不丟,這個副本數需要設置成大于1。 | >= 3 |
| min.insync.replicas | 這個參數要跟生產者里的acks參數配合使用,當生產者acks=-1時,服務端的ISR列表里的所有副本都寫入成功,才會給生產者返回成功的響應。 ? 而min.insync.replicas這個參數就是控制ISR列表的,假設min.insync.replicas=1,這就意味著ISR列表里可以只有一個副本,這個副本就是leader replica,這個時候即使acks設置的是-1,但其實消息只發送到leader replica,以后就返回成功的響應了。 ? 因為ISR只有一個副本,我們知道這種情況是有可能會丟數據的,所以min.insync.replicas這個值需要大于1的(如果ISR列表里面副本的個數小于min.insync.replicas,生產者發送消息是失敗的),并且是min.insync.replicas <= replication.factor | 1<min.insync.replicas <=replication.factor |
interval.messages=10000
當達到下面的時間(ms)時,執行一次強制的flush操作。interval.ms和interval.messages無論哪個達到,都會flush。默認3000ms
log.flush.interval.ms=1000
檢查是否需要將日志flush的時間間隔
log.flush.scheduler.interval.ms = 3000
?
設置好消息重試機制
?
下面根據[11][12]
| 函數 | 作用 | 對應的設置[12] |
| cleanupExpiredSegments | 負責清理過期的日志數據 | log.retention.hours log.retention.minutes log.retention.ms |
| cleanupSegmentsToMaintainSize | 負責清理超過指定容量的日志數據 | log.retention.bytes |
?
---------------------------------------------------------------------------------------------------------------------消費者------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 變量 | 推薦設置 |
| enable.auto.commit | false |
?
?
?
Reference:
[1]kafka中的ISR、AR又代表什么?ISR伸縮又是什么?
[2]Kafka零數據丟失的配置方案
[3]Kafka丟失數據問題優化總結(需要后面再看下)
[4]一步步解決spring-kafka消息丟失(提了下spring版本和kafka驅動版本的匹配log.retention.bytes性)
[5]kafka消息會不會丟失?為什么?看了這個你就清楚了
[6]Kafka源碼分析及圖解原理之Broker端
[7]kafka消息丟失情況與解決方案
[8]面試官問:Kafka 會不會丟消息?怎么處理的?
[9]Kafka 消息丟失與消費精確一次性
[10]kafka如何防止數據丟失(從生產者/服務器/消費者角度)
[11]Kafka 異常丟失大量數據的解決方案
[12]Kafka清除數據日志詳解
總結
以上是生活随笔為你收集整理的kafka丢数据问题方案(转载+整理+汇总)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机具有高效的运算能力的基础是什么
- 下一篇: 拼多多4.5元手表使用功能图