Kafka資料可靠性與一致性解析
1.Partition Recovery機制
每個Partition會在磁碟記錄一個RecoveryPoint, 記錄已經flush到磁碟的最大offset。當broker fail 重啟時,會進行loadLogs。 首先會讀取該Partition的RecoveryPoint,找到包含RecoveryPoint的segment及以後的segment, 這些segment就是可能沒有 完全flush到磁碟segments。然後呼叫segment的recover,重新讀取各個segment的msg,並重建索引
優點
- 1.以segment為單位管理Partition資料,方便資料生命週期的管理,刪除過期資料簡單
- 2.在程式崩潰重啟時,加快recovery速度,只需恢復未完全flush到磁碟的segment
- 3.通過index中offset與物理偏移對映,用二分查詢能快速定位msg,並且通過分多個Segment,每個index檔案很小,查詢速度更快。
2.Partition Replica同步機制
- 1.Partition的多個replica中一個為Leader,其餘為follower
- 2.Producer只與Leader互動,把資料寫入到Leader中
- 3.Followers從Leader中拉取資料進行資料同步
- 4.Consumer只從Leader拉取資料
ISR:所有不落後的replica集合, 不落後有兩層含義:距離上次FetchRequest的時間不大於某一個值或落後的訊息數不大於某一個值, Leader失敗後會從ISR中選取一個Follower做Leader
3.資料可靠性保證
當Producer向Leader傳送資料時,可以通過acks引數設定資料可靠性的級別
- 1.0: 不論寫入是否成功,server不需要給Producer傳送Response,如果發生異常,server會終止連線,觸發Producer更新meta資料;
- 2.1: Leader寫入成功後即傳送Response,此種情況如果Leader fail,會丟失資料
3.-1: 等待所有ISR接收到訊息後再給Producer傳送Response,這是最強保證
僅設定acks=-1也不能保證資料不丟失,當Isr列表中只有Leader時,同樣有可能造成資料丟失。要保證資料不丟除了設定acks=-1, 還要保 證ISR的大小大於等於2,具體引數設定:1.request.required.acks:設定為-1 等待所有ISR列表中的Replica接收到訊息後採算寫成功;
- 2.min.insync.replicas: 設定為大於等於2,保證ISR中至少有兩個Replica
Producer要在吞吐率和資料可靠性之間做一個權衡
4.資料一致性保證
一致性定義:若某條訊息對Consumer可見,那麼即使Leader宕機了,在新Leader上資料依然可以被讀到
- 1.HighWaterMark簡稱HW: Partition的高水位,取一個partition對應的ISR中最小的LEO作為HW,消費者最多隻能消費到HW所在的位置,另外每個replica都有highWatermark,leader和follower各自負責更新自己的highWatermark狀態,highWatermark <= leader. LogEndOffset
- 2.對於Leader新寫入的msg,Consumer不能立刻消費,Leader會等待該訊息被所有ISR中的replica同步後,更新HW,此時該訊息才能被Consumer消費,即Consumer最多隻能消費到HW位置
這樣就保證瞭如果Leader Broker失效,該訊息仍然可以從新選舉的Leader中獲取。對於來自內部Broker的讀取請求,沒有HW的限制。同時,Follower也會維護一份自己的HW,Folloer.HW = min(Leader.HW, Follower.offset)
主要參考&引用楊永輝wiki
相關推薦
Kafka資料可靠性與一致性解析
1.Partition Recovery機制 每個Partition會在磁碟記錄一個RecoveryPoint, 記錄已經flush到磁碟的最大offset。當broker fail 重啟時,會進行loadLogs。 首先會讀取該Partition的R
kafka-如何保證訊息的可靠性與一致性
在kafka中主要通過ISR機制來保證訊息的可靠性。 下面通過幾個問題來說明kafka如何來保證訊息可靠性與一致性 在kafka中ISR是什麼? 在zk中會儲存AR(Assigned Replicas)列表,其中包含了分割槽所有的副本,其中 AR = ISR+OSR
Kafka資料複製與Failover
CAP理論 Consistency Availability Partition tolerance CAP理論:分佈時系統中,一致性,可用性,分割槽容性,最多值可能滿足倆個,一般分錯容錯性要求由保
學習筆記 --- Kafka Spark Streaming獲取Kafka資料 Receiver與Direct的區別
Receiver 使用Kafka的高層次Consumer API來實現 receiver從Kafka中獲取的資料都儲存在Spark Executor的記憶體中,然後Spark Streaming啟動的job會去處理那些資料 要啟用高可靠機制,讓資料零丟失,就必須啟用Spark
Kafka資料可靠性深度解讀
1 概述 Kakfa起初是由LinkedIn公司開發的一個分散式的訊息系統,後成為Apache的一部分,它使用Scala編寫,以可水平擴充套件和高吞吐率而被廣泛使用。目前越來越多的開源分散式處理系統如Cloudera、Apache Storm、Spark等都支援與Kafka
論Spark Streaming的資料可靠性和一致性
眼下大資料領域最熱門的詞彙之一便是流計算了,其中最耀眼的專案無疑是來自Spark社群的Spark Streaming專案,其從一誕生就受到廣泛關注並迅速發展,目前已有追趕並超越Storm的架勢。 對於流計算而言,毫無疑問最核心的特點是它的低時延能力,這主要是來自對資料不
論SparkStreaming的資料可靠性和一致性
Driver HA 由於流計算系統是長期執行、且不斷有資料流入,因此其Spark守護程序(Driver)的可靠性至關重要,它決定了Streaming程式能否一直正確地執行下去。 Driver實現HA的解決方案就是將元資料持久化,以便重啟後的狀態恢復。如圖一所示,D
深度解讀Kafka資料可靠性
Kafka起初是由LinkedIn公司開發的一個分散式的訊息系統,後成為Apache的一部分,它使用Scala編寫,以可水平擴充套件和高吞吐率而被廣泛使用。目前越來越多的開源分散式處理系統如Cloudera、Apache Storm、Spark等都支援與Kafka整合。 1 概述 Kafka
Kafka 資料可靠性深度解讀
1 概述Kakfa起初是由LinkedIn公司開發的一個分散式的訊息系統,後成為Apache的一部分,它使用Scala編寫,以可水平擴充套件和高吞吐率而被廣泛使用。目前越來越多的開源分散式處理系統如Cloudera、Apache Storm、Spark等都支援與Kafka整合
kafka資料可靠性詳解
一、AR 在Kafka中維護了一個AR列表,包括所有的分割槽的副本。AR又分為ISR和OSR。 AR = ISR + OSR。 AR、ISR、OSR、LEO、HW這些資訊都被儲存在Zookeeper中。 1.ISR ISR中的副本都要同步leader中的資料,只有都
Java資料結構與演算法解析(九)——B樹
B樹簡介 定義 在電腦科學中,B樹(英語:B-tree)是一種自平衡的樹,能夠保持資料有序。這種資料結構能夠讓查詢資料、順序訪問、插入資料及刪除的動作,都在對數時間內完成。 特點 階為M的B樹是一顆具有以下特點的樹: 1.資料項儲存在樹葉上
lua資料儲存與檔案解析
1、簡單介紹: cocos2dx-lua中對檔案的操作都用cc.FileUtils這個類進行操作,它是單一例項。 訪問res目錄:(fullPathForFilename(arg)) local fullPathForFilename =cc.FileUtils:getIn
Atlas kafka資料匯入失敗問題與zkUtils中Zookeeper連線解析
Atlas kafka資料匯入失敗 atlas版本:apache-atlas-1.0.0 Atlas安裝完後需要匯入hive和kafka的資料 呼叫Atlas的import-kafka.sh匯入kafka資料 結果顯示Kafka Data Model impor
把kafka資料從hbase遷移到hdfs,並按天載入到hive表(hbase與hadoop為不同叢集)
需求:由於我們用的阿里雲Hbase,按儲存收費,現在需要把kafka的資料直接同步到自己搭建的hadoop叢集上,(kafka和hadoop叢集在同一個區域網),然後對接到hive表中去,表按每天做分割槽 一、首先檢視kafka最小偏移量(offset) /usr/local/kafka/bin/k
資料結構與演算法MOOC-第四章字串練習題解析彙總
資料結構與演算法MOOC-第四章字串練習題解析彙總 1:合格的字串 OpenJudge-合格的字串 2:去除C程式中的註釋 OpenJudge-去除C程式中的註釋 3:全在其中 POJ 938/UVA 10340
[Xcode10 實際操作]七、檔案與資料-(8 )讀取和解析Plist檔案(屬性列表檔案)
本文將演示如何讀取和解析Plist檔案,即屬性列表檔案。 它是用來儲存,序列化後的物件的檔案。 在專案名稱上點選滑鼠右鍵,彈出右鍵選單, 選擇【New File】新建檔案命令,建立一份屬性列表檔案。 在彈出的模板選項視窗中,點選右側的垂直滾動條,跳轉到【Resource】資原始檔的模板列表。 然後選
【資料結構與演算法經典問題解析--java語言描述】_第20、21章_學習記錄
【資料結構與演算法經典問題解析--java語言描述】_第20、21章_學習記錄 第20章: 第21章: 1.1 本章主要介紹的是對於面試和考試有用的話題 1.2 位運算的使用 1.2.1 按位與操作
kafka實戰 - 資料可靠性
概述 常見的儲存高可用方案的根本原理就是把資料複製到多個儲存裝置,通過資料冗餘的方式來實現資料的可靠性。比如同一份資料,一份在城市A,一份在城市B。如果城市A發生自然災害導致機房癱瘓,那麼業務就可以直接切到城市B進行服務,從而保障業務的高可用。但是這是理想情況,一旦資料被複制並且分開儲存,就涉及到了網路
Spark-Streaming獲取kafka資料的兩種方式:Receiver與Direct的方
簡單理解為:Receiver方式是通過zookeeper來連線kafka佇列,Direct方式是直接連線到kafka的節點上獲取資料 回到頂部 使用Kafka的高層次Consumer API來實現。receiver從Kafka中獲取的資料都儲存在Spark Exec
併發操作與資料的不一致性
1,什麼是併發操作? 資料庫的一個重要特徵是:支援資料共享,也就是說允許多個使用者程式並行地存取資料庫中的資料;那麼,多使用者或多事物可能同時對同一資料進行操作,這成為併發操作。 2,併發操作可能帶來的影響? 如果不對併發操作進行控制的話,那麼就會存取不正確的資料,