You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 13 Next »

This page is meant as a template for writing a KIP. To create a KIP choose Tools->Copy on this page and modify with your content and replace the heading with the next KIP number and a description of your issue. Replace anything in italics with your own description.

Status

Current state: "Under Discussion"

Discussion thread: here

JIRA: here

Please keep the discussion on the mailing list rather than commenting on the wiki (wiki discussions get unwieldy fast).

Motivation

Log recovery is a process when a broker start up, if it has previous unclean shutdown, it'll be triggered to make sure the log is in a good state and not get corrupted. The process of log recovery is as below (producer snapshot and other steps are skipped here):

  1. iterate all dirs in "log.dirs" config one by one
    1. find out the topic partition log folder under the dir
    2. Iterate all the topic partition log folders and add them as jobs to thread pool with the "num.recovery.threads.per.data.dir" config number of threads
      1. load all the segments under log folder, suppose there are 10 segments
      2. filter out the segments after "recovery checkpoint", suppose there are 5 segments needed to be recovered
      3. recover the 5 segments, one by one
        1. iterate all the record batches inside the segment
        2. validate all the batches
        3. rebuilt the indexes.

As we can imagine, if the broker stores a lot of logs, the log recovery process might take hours or days for the log recovery.


So far, we have no way to know the log recovery progress. All we can do is check the broker log and know it is busy on doing recovery. In this KIP, we're going to expose a RemainingLogsToRecovery  metric for each log.dir and RemainingSegmentsToRecovery  metric for each recovery thread, to allow the admin have a way to monitor the progress of log recovery.

Public Interfaces

RemainingLogsToRecovery  metric will be added into "kafka.log" → LogManager for each log.dir.

RemainingSegmentsToRecovery metric will be added into "kafka.log" → LogManager for each recovery thread.

Proposed Changes

The proposal is to propose 2 metrics:

1.  RemainingLogsToRecovery: It's to show the remaining logs number for each log.dir to be recovered. The total number of logs to be recovered will be summed in step (1.b) described in "motivation" section. When each log completes the recovery for all the segments under the log, the RemainingLogsToRecovery will be decremented, and in the end, it'll be 0. When broker is not under log recovery state, the number will always be 0.

2. RemainingSegmentsToRecovery: It's to show the remaining segments to be recovered in each recovery thread (i.e. in each replica log). The total number of segments to be recovered will be calculated in step (1.b.ii) described in "motivation" section. When each segment completes the recovery, the RemainingSegmentsToRecovery will be decremented, and in the end, it'll be 0. When broker is not under log recovery state, the number will always be 0.

For example:

log.dirs=/tmp/log1,tmp/log2

num.recovery.threads.per.data.dir=2

In the jmx, we'll see

  • kafka.log
    • LogManager
      • RemainingLogsToRecover 
        • /tmp/log1 => 5            ← there are 5 logs under /tmp/log1 needed to be recovered
        • /tmp/log2 => 0
      • RemainingSegmentsToRecover
        • /tmp/log1                     ← 2 threads are doing log recovery for /tmp/log1
          • 0 => 10000         ← there are 10000 segments needed to be recovered for thread 0
          • 1 => 3
        • /tmp/log2
          • 0 => 0
          • 1 => 0

Compatibility, Deprecation, and Migration Plan

No compatibility issue and no migration plan needed because this KIP only adds a metric for log recovery.

Rejected Alternatives

1. output the log recovery progress in logs

This is not conflicted with the KIP, but finding the log recovery progress inside the broker logs is not easy for admins. Actually, during the implementation, we'll also improve the log output to have much clear info for log recovery progress. On the other hands, having the metrics is still a better way to monitor the log recovery progress for admins.


  • No labels