[ https://issues.apache.org/jira/browse/KAFKA-12734?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Wenbing Shen resolved KAFKA-12734. ---------------------------------- Resolution: Duplicate Duplicate with jiraId KAFKA-10471, This problem has been fixed in version 2.8. > LazyTimeIndex & LazyOffsetIndex may cause niobufferoverflow when skip > activeSegment sanityCheck > ------------------------------------------------------------------------------------------------ > > Key: KAFKA-12734 > URL: https://issues.apache.org/jira/browse/KAFKA-12734 > Project: Kafka > Issue Type: Bug > Components: log > Affects Versions: 2.4.0, 2.5.0, 2.6.0, 2.7.0, 2.8.0 > Reporter: Wenbing Shen > Assignee: Wenbing Shen > Priority: Blocker > Attachments: LoadIndex.png, image-2021-04-30-22-49-24-202.png, > niobufferoverflow.png > > > This question is similar to KAFKA-9156 > We introduced Lazy Index, which helps us skip checking the index files of all > log segments when starting kafka, which has greatly improved the speed of our > kafka startup. > Unfortunately, it skips the index file detection of the active segment. The > active segment will receive write requests from the client or the replica > synchronization thread. > There is a situation when we skip the index detection of all segments, and we > do not need to recover the unflushed log segment, and the index file of the > last active segment is damaged at this time. When appending data to the > active segment, at this time The program reported an error. > Below are the problems I encountered in the production environment: > When Kafka starts to load the log segment, I see in the program log that the > memory mapping position of the index file with timestamp and offset is at the > larger position of the current index file, but in fact, the index file is not > written With so many index items, I guess this kind of problem will occur > during the kafka startup process. When kafka has not been started yet, stop > the kafka process at this time, and then start the kafka process again, > whether it will cause the limit address of the index file memory map to be a > file The maximum value is not cut to the actual size used, which will cause > the memory map position to be set to limit when Kafka is started. > At this time, adding data to the active segment will cause niobufferoverflow. > I agree to skip the index detection of all inactive segments, because in fact > they will no longer receive write requests, but for active segments, we need > to perform index file detection. > Another situation is that we have CleanShutdown, but due to some factors, > the index file of the active segment sets the position of the memory map to > limit, resulting in a niobuffer overflow in the write -- This message was sent by Atlassian Jira (v8.3.4#803005)