我們有一個由 3 個盒子組成的 2.3 Kafka 集群。當我們幾天前將它升級到 2.3 時,我們注意到那些日志消息導致兩個代理上的一個主題分區的 replicaFetcher 線程崩潰:[2019-08-09 15:02:43,520] ERROR [ReplicaFetcher replicaId=4, leaderId=3, fetcherId=0] Unexpected error occurred while processing data for partition __consumer_offsets-21 at offset 57542337 (kafka.server.ReplicaFetcherThread)kafka.common.UnexpectedAppendOffsetException: Unexpected offset in append to __consumer_offsets-21. First offset 57542333 is less than the next offset 57542337. First 10 offsets in append: List(57542333,57542334, 57542335, 57542336, 57542337, 57542338, 57542339, 57542340, 57542341, 57542342), last offset in append: 57570869. Log start offset = 56949140 at kafka.log.Log.$anonfun$append$2(Log.scala:929) at kafka.log.Log.maybeHandleIOException(Log.scala:2065)影響是一個 broker 不能成為這個主題分區的 ISR(實際上第二個 broker 有同樣的問題,所以我們只有一個 ISR,它是領導者)。我仍然對這條消息感到困惑,我無法正確理解它,所以我無法找到解決此問題的正確方法。我真的很想了解這里發生了什么,但不確定我是否理解以下代碼:https://github.com/apache/kafka/blob/a48b5d900c6b5c9c52a97124a1b51aff3636c32c/core/src/main/scala/kafka/log/Log.scala#L1081-L1098 if (appendInfo.firstOrLastOffsetOfFirstBatch < nextOffsetMetadata.messageOffset) {當 replicaFetcher 必須附加記錄時,它如何訪問 nextOffset 信息..?不確定這個分析到底做了什么(要追加的當前記錄?):val appendInfo = analyzeAndValidateRecords(records, isFromClient = isFromClient)和這個 :nextOffsetMetadata這是下一批記錄嗎?它如何訪問任何“下一個”記錄元數據?如果有人可以澄清這一點,那就太好了。與此同時,解決這個問題的方法會很好,但我還是更愿意清楚地理解它。編輯:經過一些研究,有些事情變得更加清晰。nextOffset 只是活動段的最新偏移量+1(這些元數據來自 loadSegments() 調用)。綜上所述,這里發生了什么:副本從領導者那里獲取段,其起始偏移量低于活動段的最新偏移量。所以這是我的問題,為什么副本不只是截斷?
添加回答
舉報
0/150
提交
取消