[
https://issues.apache.org/jira/browse/KAFKA-6262?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Dong Lin updated KAFKA-6262:
----------------------------
Summary: KIP-232: Detect outdated metadata by adding
ControllerMetadataEpoch field (was: Consumer should not use metadata that is
older than the existing metadata)
> KIP-232: Detect outdated metadata by adding ControllerMetadataEpoch field
> -------------------------------------------------------------------------
>
> Key: KAFKA-6262
> URL: https://issues.apache.org/jira/browse/KAFKA-6262
> Project: Kafka
> Issue Type: Bug
> Reporter: Dong Lin
> Assignee: Dong Lin
>
> Currently the following sequence of events may happen that cause consumer to
> rewind back to the earliest offset even if there is no log truncation in
> Kafka. This can be a problem for MM by forcing MM to lag behind significantly
> and duplicate a large amount of data.
> - Say there are three brokers 1,2,3 for a given partition P. Broker 1 is the
> leader. Initially they are all in ISR. HW and LEO are both 10.
> - SRE does controlled shutdown for broker 1. Controller sends
> LeaderAndIsrRequest to all three brokers so that leader = broker 2 and
> isr_set = [broker 2, broker 3].
> - Broker 2 and 3 receives and processes LeaderAndIsrRequest almost
> instantaneously. Now broker 2 and broker 3 can accept ProduceRequest and
> FetchRequest for the partition P.
> However, broker 1 has not processed this LeaderAndIsrRequest due to backlog
> in its request queue. So broker 1 still think it is leader for the partition
> P.
> - Because there is leadership movement, a consumer receives
> NotLeaderForPartitionException, which triggers this consumer to send
> MetadataRequest to a randomly selected broker, say broker 2. Broker 2 tells
> consumer that itself is the leader for partition P. Consumer fetches date of
> partition P from broker 2. The latest data has offset 20.
> - Later this consumer receives NotLeaderForPartitionException for another
> partition. It sends MetadataRequest to a randomly selected broker again. This
> time it sends MetadataRequest to broker 1, which tells the consumer that
> itself is the leader for partition P.
> - This consumer issues FetchRequest for the partition P at offset 21. Broker
> 1 returns OffsetOutOfRangeExeption because it thinks the LogEndOffset for
> this partition is 10.
> There are two possible solutions for this problem. The long term solution is
> probably to include version in the MetadataResponse so that consumer knows
> whether the medata is outdated. This requires a KIP.
> The short term solution, which should solve the problem in most cases, is to
> let consumer keep fetching metadata from the same (initially randomly picked)
> broker until the connection to this broker is disconnected. The metadata
> version will not go back in time if consumer keeps fetching metadata from the
> same broker.
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)