91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Kafka保證零數據丟失的配置方案

發布時間:2021-08-25 06:59:42 來源:億速云 閱讀:130 作者:chen 欄目:編程語言

本篇內容介紹了“Kafka保證零數據丟失的配置方案”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

如果要想保證Kafka數據不丟, 要從Kafka的三個地方入手:生產者、服務端和消費者。

生產者

01 /  API使用
在生產中Kafka生產者的開發我們都會用異步調用的方式,異步調用方式有如下兩個API:

1)producer.send(msg)    不帶回調方法2)producer.send(msg,callback)   帶回調方法


記得要使用帶有回調方法的API,我們可以根據回調函數得知消息是否發送成功,如果發送失敗了我們要進行異常處理,比如存儲到其他介質來保證消息不丟。
02 /  acks參數設置

acks這個參數有三個值:0,1,-1,但是不同的參數對應的含義不同,那如果我們想要保證數據不丟,acks值應該設置為哪個參數呢?請看下面的表格:

0
代表生產者只要把消息發送出去以后就認為消息發送成功了,這種方式有可能會導致數據丟失,因為有可能消息發送到服務端以后服務端存儲失敗了。
1

代表生產者把消息發送到服務端,服務端的leader replica 副本寫成功以后,就返回生產者消息發送成功了,這種方式也有可能會導致丟數據,因為有可能剛好數據寫入到leader replica,然后返回處理成功的響應給生產者,假如這個時候leader replica在的服務器出問題了,follower replica還沒來得及同步數據,這個時候是會丟數據的。
-1(all)

代表生產者把消息發送到服務端,服務端的ISR列表里所有replica 都寫入成功以后,才會返回成功響應給生產者。假設ISR列表里面有該分區的三個replica(一個leader replica,兩個follower replica),那么acks=-1就意味著消息要寫入到leader replica,并且兩個follower replica從leader replica上同步數據成功,服務端才會給生產者發送消息發送成功的響應。

所以ISR列表里面的replica就非常關鍵。如果我們想要保證數據不丟,那么acks的值設置為-1,并且還需要保證ISR列表里面是1個副本以上,具體由哪個參數控制,看下面的服務端的配置。

所以acks的值要設置為-1。

03 /  重試次數設置所以acks的值要設置為-1。

為了保證數據不丟,我們盡可能的設置較大的重試次數(參數是retries),如果重試失敗了,對異常進行處理,可以把消息保存到另外安全到地方。

服務端

01 / unclean.leader.election.enable

這個參數是控制leader replica出問題了以后follower replica競選leader replica資格的,我們把設置為false,意思就是如果follower replica如果落后leader replica太多就不能參與競選。
02 /  replication.factor
這個參數設置的是partition副本的個數,如果我們要想保證數據不丟,這個副本數需要設置成大于1。
03 /  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

消費者

01 /  手動提交offset
消費者是可以自動提交offset的,但是如果是自動提交offset,可能會丟數據,比如消費者每隔3秒提交一次offset,假如偏移量成功提交了,但是數據處理失敗了,這個時候就會丟數據。所以把enable.auto.commit設置成false就行。
當然,我們也只是有限度的保證Kafka數據不丟,因為我們知道Kafka的數據首先是寫到操作系統緩存的,假如我們用了上面的配置方案,數據寫入成功了,還沒落到磁盤,但是集群停電了,這個時候也是會丟數據的!

Kafka 是一種高吞吐量的分布式發布訂閱消息系統,它能夠解決和處理的問題還有很多。當然了,要想成為一名合格的大數據工程師,還要具備系統的大數據技術知識體系,并熟練使用技術解決不同工作場景中遇到的問題。像Zookeeper、Hadoop、Flume......

“Kafka保證零數據丟失的配置方案”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

韶关市| 岳普湖县| 浏阳市| 罗城| 民权县| 新疆| 余姚市| 南投市| 修武县| 葫芦岛市| 即墨市| 高雄县| 策勒县| 喜德县| 雷波县| 和龙市| 宁城县| 乐至县| 朝阳县| 南江县| 酉阳| 临泉县| 广河县| 辽中县| 中山市| 吴旗县| 高阳县| 龙江县| 蒙城县| 文登市| 屏东县| 安新县| 锦州市| 家居| 乌鲁木齐市| 若尔盖县| 垫江县| 古田县| 白城市| 商河县| 伊吾县|