kafka原理詳解之各種offset和checkpoint
每一個分割槽都是一個順序的、不可變的訊息佇列,並且可以持續的新增。分割槽中的訊息都被分配了一個序列號,稱之為偏移量(offset),在每個分割槽中此偏移量都是唯一的。
一個分割槽在檔案系統裡儲存為一個資料夾。資料夾裡包含日誌檔案和索引檔案。其檔名是其包含的offset的最小的條目的offset。
每個檔案是一個segment。
在broker的log儲存檔案下,除了儲存這各個topic的資料夾,還存在這幾個checkpoint檔案。分別是
- recovery-point-offset-checkpoint 負責記錄topic已經被寫入磁碟的offset
- replication-offset-checkpoint 負責記錄已經被複制到別的topic上的檔案
__consumer_offsets
儲存各個topic的offset。但是,他的只有一份。
- logStartOffset 日誌段集合中第一個日誌段(segment)的基礎位移,也就是這個日誌物件的基礎位移
- LogEndOffset 下一條將要被加入到日誌的訊息的位移
FAQ
Resetting first dirty offset of __consumer_offsets
例如,重複報錯資訊如下,這顯然是清理執行緒在一直遇到麻煩。
[2018-06-01 13:46:27,156] WARN Resetting first dirty offset of __consumer_offsets-18 to log start offset 44 since the checkpointed offset 42 is invalid. (kafka.log.LogCleanerManager$)
報錯程式碼段為
val lastCleanOffset: Option[Long] = lastClean.get(topicPartition)
// If the log segments are abnormally truncated and hence the checkpointed offset is no longer valid;
// reset to the log starting offset and log the error
val logStartOffset = log.logSegments.head.baseOffset
val firstDirtyOffset = {
val offset = lastCleanOffset.getOrElse(logStartOffset)
if (offset < logStartOffset) {
// don't bother with the warning if compact and delete are enabled.
if (!isCompactAndDelete(log))
warn(s"Resetting first dirty offset of ${log.name} to log start offset $logStartOffset since the checkpointed offset $offset is invalid.")
logStartOffset
} else {
offset
}
}
我們可以看見,清理執行緒試圖獲取一個partition的最後清理的位移(lastCleanOffset),並同時獲取了該partition中現存的所有segment中最小的頭部offset(logStartOffset)。但是,卻發現lastCleanOffset比logStartOffset還要小。清理執行緒自然會反應,那些我沒有清理的資料跑哪裡去了呢?抱怨完後,其將firstDirtyOffset置為logStartOffset,準備下一次從這裡開始清理。報錯中令人迷惑的checkpointed offset是指lastCleanOffset。
val dirtyNonActiveSegments = log.logSegments(firstDirtyOffset, log.activeSegment.baseOffset)
kafka本來應該是在完成清理後將lastCleanOffset提高,但是問題在於,如果此時沒有可清理的segment,lastCleanOffset也就將保持不變。則執行緒下一次迴圈時仍然會遇到這個問題。
解決方案中最快捷的是清空kafka的data目錄。或者忽略這個問題,等待大量資料灌入。一旦產生可以清理的segment,這個問題就會解決。
相關推薦
kafka原理詳解之各種offset和checkpoint
每一個分割槽都是一個順序的、不可變的訊息佇列,並且可以持續的新增。分割槽中的訊息都被分配了一個序列號,稱之為偏移量(offset),在每個分割槽中此偏移量都是唯一的。 一個分割槽在檔案系統裡儲存為一個資料夾。資料夾裡包含日誌檔案和索引檔案。其檔名是其包含的of
解決ajax跨域的方法原理詳解之Cors方法
詳細 不同 htm 渲染 jsonp del 需要 methods href 1、神馬是跨域(Cross Domain) 對於端口和協議的不同,只能通過後臺來解決。 一句話:同一個ip、同一個網絡協議、同一個端口,三者都滿足就是同一個域,否則就是 跨域問題了。而為
Kafka 原理詳解
Kafka 原理詳解 1 kakfa基礎概念說明 Broker:訊息伺服器,就是我們部署的一個kafka服務 Partition:訊息的水平分割槽,一個Topic可以有多個分割槽,這樣實現了訊息的無限量儲存 Replica:訊息的副本,即備份訊息,儲存在其他的broker上,當leader掛
Android系統詳解之獲取圖片和視訊的縮圖
從Android 2.2開始系統新增了一個縮圖ThumbnailUtils類,位於framework的android.media.ThumbnailUtils位置,可以幫助我們從mediaprovider中獲取系統中的視訊或圖片檔案的縮圖,該類提供了三種靜態方法可以直接呼
視訊直播技術詳解之推流和傳輸
宣告:本文為CSDN原創投稿文章,未經許可,禁止任何形式的轉載。 作者:七牛雲 責編:錢曙光,關注架構和演算法領域,尋求報道或者投稿請發郵件[email protected],另有「CSDN 高階架構師群」,內有諸多知名網際網路公司的大牛架構師,
Java程式設計師從笨鳥到菜鳥之(四十八)細談struts2(十)ognl概念和原理詳解
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
各種音視訊編解碼學習詳解之 編解碼學習筆記(三):Mpeg系列——Mpeg 1和Mpeg 2
最近在研究音視訊編解碼這一塊兒,看到@bitbit大神寫的【各種音視訊編解碼學習詳解】這篇文章,非常感謝,佩服的五體投地。奈何大神這邊文章太長,在這裡我把它分解很多小的篇幅,方便閱讀。大神部落格傳送門:https://www.cnblogs.com/skyofbitbit
十四、併發程式設計之ReentrantLock公平鎖和非公平鎖原理詳解
一、簡介 Java語言中有許多原生執行緒安全的資料結構,比如ArrayBlockingQueue、CopyOnWriteArrayList、LinkedBlockingQueue,它們執行緒安全的實現方式並非通過synchronized關鍵字,而是通過java.util.concurre
深入理解Oracle表(5):三大表連線方式詳解之Hash Join的定義,原理,演算法,成本,模式和點陣圖
Hash Join只能用於相等連線,且只能在CBO優化器模式下。相對於nested loop join,hash join更適合處理大型結果集 Hash Join的執行計劃第1個是hash表(build table),第2個探查表(probe table),
併發容器之ArrayBlockingQueue和LinkedBlockingQueue實現原理詳解
1. ArrayBlockingQueue簡介 在多執行緒程式設計過程中,為了業務解耦和架構設計,經常會使用併發容器用於儲存多執行緒間的共享資料,這樣不僅可以保證執行緒安全,還可以簡化各個執行緒操作。例如在“生產者-消費者”問題中,會使用阻塞佇列(Blocki
lvs和keeplived的工作原理詳解
lvs+keeplived的工作原理一、lvs的工作原理 使用集群的技術和liunx的操作系統實現一個高性能、高可用的服務器。可伸縮性、可靠性、很好的管理性。 特點:可伸縮網絡服務的幾種結構,它們都需要一個前端的負載調度器(或者多個進行主從備份)。我們先分析實現虛擬網絡服務的主要技術,指出IP負載均衡技術
編碼原理詳解(四)---之字形掃描
便是 集中 img 詳解 工作 -- 漢字 如何 編碼原理 上一篇我們講到,經過量化後得到了諸多零值和整數值,本篇接下來講講編碼過程中過對這些值如何組織和處理,那就是ZigZag掃描嘍。 一、簡介 ZigZag掃描也稱作之字形掃描,何以得此稱謂,是因為其掃描的路徑特
大數據學習之(Storm)-原理詳解!
大數據 storm 角色 Client client的主要作用是提交topology到集群 Worker Worker是運行在Supervisor節點上的一個獨立的JVM進程,主要作用是運行topology,一個topology可以包含多個worker,但一個worker只能屬於一個topology
機器學習中的概率模型和概率密度估計方法及VAE生成式模型詳解之二(作者簡介)
AR aca rtu href beijing cert school start ica Brief Introduction of the AuthorChief Architect at 2Wave Technology Inc. (a startup company
機器學習中的概率模型和概率密度估計方法及VAE生成式模型詳解之五(第3章 之 EM算法)
ado vpd dea bee OS deb -o blog Oz 機器學習中的概率模型和概率密度估計方法及VAE生成式模型詳解之五(第3章 之 EM算法)
機器學習中的概率模型和概率密度估計方法及VAE生成式模型詳解之六(第3章 之 VI/VB算法)
dac term http 51cto -s mage 18C watermark BE ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
機器學習中的概率模型和概率密度估計方法及VAE生成式模型詳解之七(第4章 之 梯度估算)
.com 概率 roc 生成 詳解 time 學習 style BE ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?機器學習中的概率模型和概率密度估計方法及V
機器學習中的概率模型和概率密度估計方法及VAE生成式模型詳解之八(第4章 之 AEVB和VAE)
RM mes 9.png size mar evb DC 機器 DG ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
機器學習中的概率模型和概率密度估計方法及VAE生成式模型詳解之九(第5章 總結)
ces mark TP 生成 機器 分享 png ffffff images ? ?機器學習中的概率模型和概率密度估計方法及VAE生成式模型詳解之九(第5章 總結)