1. 程式人生 > >kafka原理詳解之各種offset和checkpoint

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原理各種offsetcheckpoint

每一個分割槽都是一個順序的、不可變的訊息佇列,並且可以持續的新增。分割槽中的訊息都被分配了一個序列號,稱之為偏移量(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 1Mpeg 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),

併發容器ArrayBlockingQueueLinkedBlockingQueue實現原理

1. ArrayBlockingQueue簡介 在多執行緒程式設計過程中,為了業務解耦和架構設計,經常會使用併發容器用於儲存多執行緒間的共享資料,這樣不僅可以保證執行緒安全,還可以簡化各個執行緒操作。例如在“生產者-消費者”問題中,會使用阻塞佇列(Blocki

lvskeeplived的工作原理

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章 AEVBVAE)

RM mes 9.png size mar evb DC 機器 DG ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

機器學習中的概率模型概率密度估計方法及VAE生成式模型九(第5章 總結)

ces mark TP 生成 機器 分享 png ffffff images ? ?機器學習中的概率模型和概率密度估計方法及VAE生成式模型詳解之九(第5章 總結)