hi Jiunn +1 to Approach A :)
Best, Chia-Ping On 2026/07/07 11:55:14 黃竣陽 wrote: > Hi Jun, Chia-Ping, > > I'd like to first explain why I believe changing the default is worthwhile. > > Documentation can only help users who already know about the problem. > Because the failure mode is silent, most users discover it only after data > has > already been missed. A safer default such as by_duration:PT5S protects users > automatically, without requiring prior awareness of the issue. > > Given that, the question is not whether the issue exists, but how best to > introduce > a safer default. > > Approach A — Follow a deprecation cycle and land the change in 5.0 > - Keep the current default (`latest`) in upcoming 4.x releases, but emit a > warning that > the default will change to `by_duration:PT5S` in 5.0 and explain how users > can retain > the current behavior explicitly. > - Change the default to `by_duration:PT5S` in 5.0. > - Update shell tools (for example, the console consumer) to explicitly use > `latest`, preserving > the expected "show only new messages" behavior. > > Approach B — Change the default in a 4.4 minor release > - Change the default to `by_duration:PT5S` in a 4.x minor release. > - Leave shell tools unchanged. > - Emit a warning explaining the change and how users can explicitly restore > `latest`. > > I favor Approach B: > > Silent data loss during partition expansion is a correctness issue, not a > usability issue. > Delaying the safer default until 5.0 leaves users relying on the implicit > default exposed unnecessarily. > Users who need latest can simply pin it explicitly. > I don't think shell tools need special handling. by_duration:PT5S only > replays a few seconds of data, > which is negligible in practice and preferable to silently missing records. > Keeping the behavior consistent > is simpler. > > Best Regards, > Jiunn-Yang > > > Jun Rao via dev <[email protected]> 於 2026年7月7日 清晨5:49 寫道: > > > > Hi, Chia-Ping, > > > > I am not sure that we need an out-of-the-box solution. The proposal in the > > KIP is also not out-of-the-box and requires users to opt-in. > > > > Thanks, > > > > Jun > > > > On Mon, Jul 6, 2026 at 11:34 AM Chia-Ping Tsai <[email protected]> wrote: > > > >> hi Jun > >> > >> Yes, updating the docs requires minimal changes to the codebase, but it is > >> not an out-of-the-box solution. From my perspective, this issue can be > >> addressed by setting the console consumer's policy back to latest. > >> > >> Let's see what Jiunn thinks > >> > >> Best, > >> Chia-Ping > >> > >> On 2026/07/06 15:59:37 Jun Rao via dev wrote: > >>> Hi, Chia-Ping, > >>> > >>> One potential downside of changing the default is that some existing > >> tools > >>> (e.g. console consumer) may depend on this behavior. For example, a user > >>> testing the system may expect to see only new messages and could be > >>> surprised by the change. Another option is to leave the default > >> unchanged, > >>> but document clearly how to prevent losing messages on new partitions > >>> through by_duration. The users can then make the corresponding config > >>> changes if needed. > >>> > >>> Thanks, > >>> > >>> Jun > >>> > >>> On Wed, Jul 1, 2026 at 9:39 AM Chia-Ping Tsai <[email protected]> > >> wrote: > >>> > >>>> Hi Jun, > >>>> > >>>> Thanks for the feedback. I agree with your conclusion. It would be > >> better > >>>> to "make haste" with a new KIP to address this. We can focus the > >> discussion > >>>> on the following points: > >>>> > >>>> 1) Should we change the default reset policy to by_duration for all > >>>> consumers? > >>>> 2) What is the optimal duration to prevent data loss while avoiding > >> large > >>>> backlogs? Note that the classic consumer has a 3-second heartbeat > >> interval, > >>>> whereas the async consumer uses 5 seconds. > >>>> 3) What are the potential side effects of replacing latest with > >>>> by_duration as the default behavior? > >>>> > >>>> Best, > >>>> Chia-Ping > >>>> > >>>> On 2026/06/30 20:39:24 Jun Rao via dev wrote: > >>>>> Hi, Chia-Ping, > >>>>> > >>>>> I agree that using by_duration with a value of 5s to 10s addresses > >> most > >>>>> common issues with expanded partitions, given the default > >>>>> heartbeat.interval.ms is 3 seconds. We can consider setting that as > >> the > >>>> new > >>>>> default. The current proposal may address some other rarer cases, > >> but it > >>>>> feels a bit like over engineering. > >>>>> > >>>>> Thanks, > >>>>> > >>>>> Jun > >>>>> > >>>>> On Tue, Jun 30, 2026 at 5:58 AM Chia-Ping Tsai <[email protected]> > >>>> wrote: > >>>>> > >>>>>> - Short durations fail during extended downtimes, leading to the > >> exact > >>>>>> silent data > >>>>>> loss this KIP aims to prevent. > >>>>>> > >>>>>> Losing the records produced to expanded partitions during a > >> downtime is > >>>>>> actually the expected behavior for the latest policy. This is > >> exactly > >>>> why, > >>>>>> in the current KIP proposal, we prefer by_duration over earliest > >> for > >>>> the > >>>>>> expanded partitions—we want to avoid forcing users to consume a > >> massive > >>>>>> accumulated backlog just because a partition is technically "new". > >>>>>> > >>>>>> To quote my previous comment from May 15: > >>>>>> "...if a consumer is offline for a while and a new partition is > >> created > >>>>>> during that downtime, the user might actually want to skip to > >> latest > >>>> when > >>>>>> resuming, rather than reading from earliest just because the > >> partition > >>>> is > >>>>>> technically 'new' to the group." > >>>>>> > >>>>>> On 2026/06/30 12:12:47 黃竣陽 wrote: > >>>>>>> Hello all, > >>>>>>> > >>>>>>> The metadata blindness and consumer downtime windows are > >> inherently > >>>>>>> unpredictable, making a fixed by_duration approach unviable. No > >>>> static > >>>>>>> duration can accommodate both extremes: > >>>>>>> > >>>>>>> - Short durations fail during extended downtimes, leading to the > >>>> exact > >>>>>> silent data > >>>>>>> loss this KIP aims to prevent. > >>>>>>> - Long durations (calibrated for worst-case scenarios) cause > >> routine > >>>>>> restarts to > >>>>>>> trigger unnecessary mass replays, undermining the latest offset > >> reset > >>>>>> policy. > >>>>>>> > >>>>>>> This is why the proposed solution uses creation time. It > >> provides a > >>>>>> discrete, > >>>>>>> deterministic signal—verifying whether a partition is actually > >> newer > >>>>>> than the group, > >>>>>>> rather than relying on an arbitrary time window that has no > >>>> correlation > >>>>>> with the consumer’s > >>>>>>> actual downtime. > >>>>>>> > >>>>>>> Best Regards, > >>>>>>> Jiunn-Yang > >>>>>>> > >>>>>>>> Chia-Ping Tsai <[email protected]> 於 2026年6月30日 下午3:05 寫道: > >>>>>>>> > >>>>>>>> Hi all, > >>>>>>>> > >>>>>>>> I'd like to revisit Jun previous comment about using > >>>> by_duration=5s. I > >>>>>> realize now that having a small backlog is actually an acceptable > >>>>>> trade-off, especially since the latest policy inherently brings a > >> tiny > >>>>>> backlog to starting consumers anyway due to the time gap between > >>>> fetching > >>>>>> the offset and actually consuming. > >>>>>>>> > >>>>>>>> If we bring the simple by_duration=5s solution back to the > >> KIP, I'd > >>>>>> like to discuss a further step: Should we just change the default > >>>> policy > >>>>>> from latest to by_duration=5s specifically for the new consumer and > >>>> share > >>>>>> consumer? > >>>>>>>> > >>>>>>>> Best, > >>>>>>>> Chia-Ping > >>>>>>>> > >>>>>>>> On 2026/06/15 17:39:19 Chia-Ping Tsai wrote: > >>>>>>>>> hi Jun > >>>>>>>>> > >>>>>>>>> The most important part of this story is how users should > >> expect > >>>> the > >>>>>> data > >>>>>>>>> they can see when using the latest or by_duration policy with > >>>> expanded > >>>>>>>>> partitions. > >>>>>>>>> > >>>>>>>>> Yes, the by_duration policy can minimize data loss, but it is > >>>>>>>>> non-deterministic, which means users will either read too many > >>>>>> historical > >>>>>>>>> records from existing partitions or lose some records from > >>>> expanded > >>>>>>>>> partitions. > >>>>>>>>> > >>>>>>>>> Also, I agree that auto.offset.reset.max.age.ms is a bit > >> hard to > >>>>>>>>> understand, and that is why I preferred having a whole new > >> policy > >>>>>> based > >>>>>>>>> entirely on group creation time (KIP-1282) > >>>>>>>>> > >>>>>>>>> Best, > >>>>>>>>> Chia-Ping > >>>>>>>>> > >>>>>>>>> Jun Rao via dev <[email protected]> 於 2026年6月16日週二 > >> 上午1:08寫道: > >>>>>>>>> > >>>>>>>>>> Hi, Chia-Ping and Jiunn-Yang, > >>>>>>>>>> > >>>>>>>>>> Thanks for the reply. I am still trying to understand the > >> value > >>>> of > >>>>>> the new > >>>>>>>>>> configs with the KIP. > >>>>>>>>>> > >>>>>>>>>> The motivation of the KIP is that a user doesn't want to > >> miss the > >>>>>> data if > >>>>>>>>>> the backlog is small. The backlog of the existing partition > >> is > >>>> easy > >>>>>> to > >>>>>>>>>> understand because it relates to retention time. The backlog > >> for > >>>> the > >>>>>> new > >>>>>>>>>> partition is a bit subtle to understand since it depends on > >> the > >>>>>> metadata > >>>>>>>>>> refresh delay. To set auto.offset.reset.max.age.ms, the user > >>>> needs > >>>>>> to > >>>>>>>>>> understand the metadata refresh delay on the consumer side > >> and > >>>> use > >>>>>> it to > >>>>>>>>>> set the config. > >>>>>>>>>> > >>>>>>>>>> Now, let's consider the alternative: setting the same value > >> for > >>>> the > >>>>>>>>>> existing by_duration policy. The KIP lists three issues with > >> this > >>>>>> approach. > >>>>>>>>>> 1. It computes the seek target client-side as now() - > >> duration, > >>>> which > >>>>>>>>>> introduces clock skew across consumers and forces operators > >> to > >>>> choose > >>>>>>>>>> overly large durations, causing unnecessary reprocessing. > >>>>>>>>>> 2. The target timestamp is recomputed on each retry, so > >> failed > >>>>>>>>>> ListOffsetsRequest retries can shift the target forward and > >>>>>> potentially > >>>>>>>>>> miss records produced between attempts. > >>>>>>>>>> 3. It applies uniformly to all partitions without committed > >>>> offsets, > >>>>>> and > >>>>>>>>>> cannot distinguish newly expanded partitions from > >> long-existing > >>>>>> partitions > >>>>>>>>>> newly assigned to the group, leading to unnecessary replay. > >>>>>>>>>> > >>>>>>>>>> Issues 1 and 2 are uncommon and can be mitigated by adding a > >> bit > >>>>>> buffer to > >>>>>>>>>> the metadata refresh delay. We could also consider improving > >> the > >>>>>>>>>> implementation. For issue 3, the metadata refresh delay is > >>>> typically > >>>>>> low > >>>>>>>>>> (in the order of minutes with the classic consumer and tens > >> of > >>>>>> seconds with > >>>>>>>>>> the new consumer). If a user is ok with reading that much > >> backlog > >>>>>> for new > >>>>>>>>>> partitions, it seems they will be ok doing the same for > >> existing > >>>>>>>>>> partitions. > >>>>>>>>>> > >>>>>>>>>> So, instead of introducing a new config, could we just reuse > >> the > >>>>>> existing > >>>>>>>>>> config with better documentation and/or implementation? > >>>>>>>>>> > >>>>>>>>>> Jun > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>>>> On Sat, Jun 13, 2026 at 12:19 AM 黃竣陽 <[email protected]> > >> wrote: > >>>>>>>>>> > >>>>>>>>>>> Hello Jun, > >>>>>>>>>>> > >>>>>>>>>>> You're right that group creation time is the more intuitive > >>>> answer > >>>>>> at > >>>>>>>>>>> first glance, > >>>>>>>>>>> the KIP's own motivation talks about partitions that > >> "predate > >>>> the > >>>>>> group" > >>>>>>>>>>> vs partitions > >>>>>>>>>>> "created during group runtime," which directly points to a > >>>>>>>>>> group-lifecycle > >>>>>>>>>>> classifier. > >>>>>>>>>>> I'd like to walk through why we landed on partition age, > >> and the > >>>>>>>>>>> trade-offs we considered. > >>>>>>>>>>> > >>>>>>>>>>> We evaluated three candidate signals: > >>>>>>>>>>> > >>>>>>>>>>> 1. `by_duration:5secs` > >>>>>>>>>>> > >>>>>>>>>>> This covers the metadata blindness window, but has issues > >> the > >>>> KIP > >>>>>>>>>>> currently documents > >>>>>>>>>>> under "Why not use `by_duration`?": > >>>>>>>>>>> > >>>>>>>>>>> - Client-side `now() - duration` introduces clock skew > >> across > >>>>>> consumers. > >>>>>>>>>>> - `ListOffsets` retries shift the target forward, > >> potentially > >>>>>> missing > >>>>>>>>>>> records produced between > >>>>>>>>>>> attempts. > >>>>>>>>>>> - It applies uniformly to all partitions without committed > >>>> offsets, > >>>>>>>>>>> including pre-existing partitions > >>>>>>>>>>> newly assigned to the group, causing unnecessary replay. > >>>>>>>>>>> > >>>>>>>>>>> 2. Group creation time as classifier > >>>>>>>>>>> > >>>>>>>>>>> This works cleanly when the consumer is actively running. > >> Our > >>>>>> concern > >>>>>>>>>>> is the idle / late-rejoin case: > >>>>>>>>>>> > >>>>>>>>>>> T=0: Group created. > >>>>>>>>>>> T=1..T=100: Consumer idle (down, disconnected, etc.). > >>>>>>>>>>> T=50: Partition added during the idle window. > >>>>>>>>>>> T=100: Consumer resumes. > >>>>>>>>>>> > >>>>>>>>>>> Under group creation time, the new partition is classified > >> as > >>>> new > >>>>>>>>>>> (`50 > 0`) and reset to `earliest`, replaying everything > >> from > >>>> T=50. > >>>>>>>>>>> But during `[T=1, T=100]`, base partitions also accumulated > >> data > >>>>>> that > >>>>>>>>>>> the consumer accepts as lost — that is precisely the > >> contract of > >>>>>>>>>>> `auto.offset.reset=latest`. There is no principled reason to > >>>> treat > >>>>>>>>>>> the new partition differently; both contain backlog > >> accumulated > >>>>>> during > >>>>>>>>>>> the same idle window. > >>>>>>>>>>> > >>>>>>>>>>> This aligns with the "backlog is backlog” principle you > >> raised > >>>> in > >>>>>>>>>>> the KIP-1282 thread: a `latest` user has tolerated some > >> backlog > >>>> on > >>>>>>>>>>> every other partition during the same idle period; forcing > >>>> 0-backlog > >>>>>>>>>>> tolerance only on new partitions would be inconsistent with > >> that > >>>>>>>>>>> tolerance. > >>>>>>>>>>> > >>>>>>>>>>> 3. Partition age vs threshold > >>>>>>>>>>> > >>>>>>>>>>> Partition age corresponds to the actual silent data loss > >> window, > >>>>>>>>>>> the gap between partition creation and the consumer’s > >> metadata > >>>>>>>>>>> refresh. Within this window, data loss is genuinely silent: > >> the > >>>>>>>>>>> consumer had no opportunity to know about the partition. > >> Outside > >>>>>> this > >>>>>>>>>>> window, missing data reflects either: > >>>>>>>>>>> > >>>>>>>>>>> - (a) the user’s tolerated cost of running with idle > >> consumers, > >>>> or > >>>>>>>>>>> - (b) an operational issue to surface via monitoring, not > >> via > >>>> reset > >>>>>>>>>> policy. > >>>>>>>>>>> > >>>>>>>>>>> We did not choose partition age because it is more elegant > >> than > >>>>>> group > >>>>>>>>>>> creation time — we chose it because its failure mode > >> (requires a > >>>>>>>>>>> threshold) is > >>>>>>>>>>> less invasive than the failure mode of group creation time > >>>>>> (overrides > >>>>>>>>>>> user-stated > >>>>>>>>>>> `latest` intent during idle periods). > >>>>>>>>>>> > >>>>>>>>>>> Best Regards, > >>>>>>>>>>> Jiunn-Yang > >>>>>>>>>>> > >>>>>>>>>>>> Chia-Ping Tsai <[email protected]> 於 2026年6月13日 上午11:52 > >> 寫道: > >>>>>>>>>>>> > >>>>>>>>>>>> Hi Jun, > >>>>>>>>>>>> > >>>>>>>>>>>> Relying on both creation times will create an inconsistent > >>>>>> scenario. A > >>>>>>>>>>>> consumer that lost all offsets due to a long sleep will > >> seek > >>>> to the > >>>>>>>>>>>> beginning for the partitions created later than the group. > >>>>>>>>>>>> > >>>>>>>>>>>> That is why we initially proposed KIP-1282 to fix the > >>>> inconsistency > >>>>>>>>>>> using a > >>>>>>>>>>>> whole new policy. Since KIP-1282 couldn't reach a > >> consensus, > >>>>>> KIP-1327 > >>>>>>>>>>> goes > >>>>>>>>>>>> back to using flexible configurations to prevent users from > >>>> falling > >>>>>>>>>> into > >>>>>>>>>>>> that pitfall. > >>>>>>>>>>>> > >>>>>>>>>>>> Best, Chia-Ping > >>>>>>>>>>>> > >>>>>>>>>>>> Jun Rao via dev <[email protected]> 於 2026年6月13日週六 > >>>> 上午6:49寫道: > >>>>>>>>>>>> > >>>>>>>>>>>>> Hi, Jiunn-Yang, > >>>>>>>>>>>>> > >>>>>>>>>>>>> Thanks for the reply and sorry for the late reply. > >>>>>>>>>>>>> > >>>>>>>>>>>>> JR1. The design of auto.offset.reset.max.age.ms still > >> feels > >>>>>> weird to > >>>>>>>>>>> me. > >>>>>>>>>>>>> It > >>>>>>>>>>>>> categorizes partitions as new or existing based on the > >>>> partition > >>>>>>>>>>> creation > >>>>>>>>>>>>> time. Intuitively, the categorization should be based on > >> the > >>>> group > >>>>>>>>>>> creation > >>>>>>>>>>>>> time: all partitions existing when the group is created > >> are > >>>>>> existing > >>>>>>>>>> and > >>>>>>>>>>>>> all partitions created after the group creation are new > >>>>>> partitions. > >>>>>>>>>>>>> > >>>>>>>>>>>>> Jun > >>>>>>>>>>>>> > >>>>>>>>>>>>> > >>>>>>>>>>>>> > >>>>>>>>>>>>> On Tue, Jun 9, 2026 at 8:51 AM 黃竣陽 <[email protected]> > >>>> wrote: > >>>>>>>>>>>>> > >>>>>>>>>>>>>> Hi all, > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> Manually bumping this thread. If there is no further > >>>>>>>>>>>>>> discussion, I will close the vote. > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> Best Regards, > >>>>>>>>>>>>>> Jiunn-Yang > >>>>>>>>>>>>>> > >>>>>>>>>>>>>>> 黃竣陽 <[email protected]> 於 2026年6月1日 晚上7:16 寫道: > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> Hello Jian, > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> Thanks for your feedback, > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> Agreed, partition expansion is a common operational > >> task, > >>>> not an > >>>>>>>>>> edge > >>>>>>>>>>>>>>> case. I've updated the Motivation section accordingly. > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> Best Regards, > >>>>>>>>>>>>>>> Jiunn-Yang > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> jian fu <[email protected]> 於 2026年6月1日 下午5:49 寫道: > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> Hi Jiunn-Yang: > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> Thanks for the KIP. I think it would be useful to > >> clarify > >>>> that > >>>>>> this > >>>>>>>>>>>>> is a > >>>>>>>>>>>>>>>> common scenario rather than an edge case, which further > >>>>>>>>>> demonstrates > >>>>>>>>>>>>> the > >>>>>>>>>>>>>>>> need for this optimization. For example: > >>>>>>>>>>>>>>>> A partition expansion is a common operational task in > >>>> Kafka: To > >>>>>>>>>>>>> balance > >>>>>>>>>>>>>>>> resource utilization and cost, topics are typically > >> created > >>>>>> with a > >>>>>>>>>>>>>> moderate > >>>>>>>>>>>>>>>> default partition count. However, as traffic grows over > >>>> time, > >>>>>> it is > >>>>>>>>>>>>>> often > >>>>>>>>>>>>>>>> necessary to increase the number of partitions to > >>>> accommodate > >>>>>> the > >>>>>>>>>>>>> higher > >>>>>>>>>>>>>>>> workload. > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> Regards > >>>>>>>>>>>>>>>> Jian > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> 黃竣陽 <[email protected]> 于2026年5月30日周六 22:31写道: > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> Hello chia, > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> Thanks for the comments, I have updated the KIP! > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> Best Regards, > >>>>>>>>>>>>>>>>> Jiunn-Yang > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> Chia-Ping Tsai <[email protected]> 於 2026年5月30日 > >> 晚上8:29 > >>>> 寫道: > >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> Hi Jiunn-Yang, > >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> Would you mind removing the terms "hot" and "cold" > >> when > >>>>>>>>>> describing > >>>>>>>>>>>>>>>>>> partitions in the KIP? I understand you are using > >> them to > >>>>>>>>>> describe > >>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>> "freshness" or the users' need for the records, but > >>>> applying > >>>>>>>>>> these > >>>>>>>>>>>>>> terms > >>>>>>>>>>>>>>>>> to > >>>>>>>>>>>>>>>>>> the partition itself feels a bit unnatural. > >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> After all, in this scenario, users don't really care > >>>> whether > >>>>>> a > >>>>>>>>>>>>>> partition > >>>>>>>>>>>>>>>>> is > >>>>>>>>>>>>>>>>>> newly expanded or not. Their only expectation is that > >>>> they > >>>>>> won't > >>>>>>>>>>>>>> silently > >>>>>>>>>>>>>>>>>> lose any live records produced to the topic during > >> their > >>>>>> active > >>>>>>>>>>>>>>>>> consumption. > >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> Best, Chia-Ping > >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> 黃竣陽 <[email protected]> 於 2026年5月30日週六 下午12:30寫道: > >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> Hello Jun, > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> Thanks for the feedback, I have updated the KIP > >>>> motivation > >>>>>>>>>>> section. > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> Best Regards, > >>>>>>>>>>>>>>>>>>> Jiunn-Yang > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> Jun Rao via dev <[email protected]> 於 > >> 2026年5月30日 > >>>>>> 凌晨1:12 寫道: > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> Hi, Jiunn-Yang, > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> Thanks for the reply. I think we need a stronger > >>>>>> motivation for > >>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>> KIP. > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> The KIP says "The core insight is that not all > >>>> partitions > >>>>>>>>>> without > >>>>>>>>>>>>> a > >>>>>>>>>>>>>>>>>>>> committed offset are the same. A newly expanded > >>>> partition > >>>>>> (hot) > >>>>>>>>>>> is > >>>>>>>>>>>>>>>>>>>> fundamentally different from a partition the > >> consumer > >>>> has > >>>>>> never > >>>>>>>>>>>>> seen > >>>>>>>>>>>>>>>>>>>> because it predates the group (cold)." Why is the > >> hot > >>>>>> partition > >>>>>>>>>>>>>>>>>>>> fundamentally different from the cold? > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> The KIP says "The existing by_duration policy is > >> also > >>>>>>>>>>> insufficient > >>>>>>>>>>>>>>>>>>> because: > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> - The calculated seek time (now() - duration) > >> varies > >>>> across > >>>>>>>>>> nodes > >>>>>>>>>>>>>> due > >>>>>>>>>>>>>>>>>>> to > >>>>>>>>>>>>>>>>>>>> clock skew. To be safe, users must set an overly > >> large > >>>>>>>>>> duration, > >>>>>>>>>>>>>>>>>>> causing > >>>>>>>>>>>>>>>>>>>> unnecessary reprocessing. > >>>>>>>>>>>>>>>>>>>> - On network errors, the client recalculates the > >> seek > >>>> time > >>>>>> on > >>>>>>>>>>>>> retry, > >>>>>>>>>>>>>>>>>>>> shifting the target timestamp forward and risking > >> data > >>>>>> loss." > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> However, both of these situations are rare. If > >> these > >>>> issues > >>>>>>>>>>>>> persist, > >>>>>>>>>>>>>>>>> more > >>>>>>>>>>>>>>>>>>>> severe problems likely exist elsewhere. Rare > >> situations > >>>>>> don't > >>>>>>>>>>>>> need a > >>>>>>>>>>>>>>>>>>> common > >>>>>>>>>>>>>>>>>>>> solution. If users care about those rare > >> situations, > >>>> they > >>>>>> can > >>>>>>>>>>>>>> implement > >>>>>>>>>>>>>>>>>>>> customized logic using > >>>>>>>>>>>>>>>>> ConsumerRebalanceListener.onPartitionsAssigned(). > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> Jun > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> On Sun, May 17, 2026 at 6:50 AM 黃竣陽 < > >>>> [email protected]> > >>>>>>>>>> wrote: > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> Hello chia, > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> Thanks for the feedback, > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>> If the creation time exists, the returned value > >>>> should > >>>>>> always > >>>>>>>>>>> be > >>>>>>>>>>>>>>>>>>> greater > >>>>>>>>>>>>>>>>>>>>> than or equal to zero, right? > >>>>>>>>>>>>>>>>>>>>> I have explicitly mentioned this in the KIP. > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>> New Old (MetadataResponse v0–13) positive > >>>> any > >>>>>>>>>>>>>> field > >>>>>>>>>>>>>>>>>>>>> absent UnsupportedVersionException > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> The earliest point at which we can detect the > >> version > >>>>>> mismatch > >>>>>>>>>>> is > >>>>>>>>>>>>>>>>> during > >>>>>>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>> first metadata fetch after assignment, which > >> occurs > >>>> inside > >>>>>>>>>>>>> poll(). > >>>>>>>>>>>>>>>>>>>>> Therefore, the > >>>>>>>>>>>>>>>>>>>>> user would encounter an > >> UnsupportedVersionException > >>>> from > >>>>>>>>>> poll(). > >>>>>>>>>>>>>> I’ll > >>>>>>>>>>>>>>>>>>>>> clarify this in the KIP. > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> Best Regards, > >>>>>>>>>>>>>>>>>>>>> Jiunn-Yang > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>> Chia-Ping Tsai <[email protected]> 於 > >> 2026年5月17日 > >>>>>> 下午4:50 寫道: > >>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>> hi Jiunn > >>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>> PartitionAgeMs (int64, default -1): The age of > >> this > >>>>>>>>>> partition > >>>>>>>>>>>>> in > >>>>>>>>>>>>>>>>>>>>> milliseconds, computed server-side by the broker > >> as > >>>>>>>>>>>>>>>>> broker_current_time > >>>>>>>>>>>>>>>>>>> - > >>>>>>>>>>>>>>>>>>>>> partition_creation_time. Returns -1 if the broker > >>>> does not > >>>>>>>>>>>>> support > >>>>>>>>>>>>>>>>> this > >>>>>>>>>>>>>>>>>>>>> feature or the partition creation time is unknown. > >>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>> If the creation time exists, the returned value > >>>> should > >>>>>> always > >>>>>>>>>>> be > >>>>>>>>>>>>>>>>>>> greater > >>>>>>>>>>>>>>>>>>>>> than or equal to zero, right? > >>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>> New Old (MetadataResponse v0–13) positive > >>>> any > >>>>>>>>>>>>>> field > >>>>>>>>>>>>>>>>>>>>> absent UnsupportedVersionException > >>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>> Will user encounter UnsupportedVersionException > >> when > >>>>>> calling > >>>>>>>>>>>>>>>>> `poll()`? > >>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>> Best, > >>>>>>>>>>>>>>>>>>>>>> Chia-Ping > >>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>> On 2026/05/16 04:30:49 黃竣陽 wrote: > >>>>>>>>>>>>>>>>>>>>>>> Hello Jun, chia, > >>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>> I've updated KIP-1327 with a design change > >> based on > >>>> the > >>>>>>>>>>>>>> discussion > >>>>>>>>>>>>>>>>>>>>>>> feedback. > >>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>> The updated design decouples the new-partition > >> reset > >>>>>>>>>> behavior > >>>>>>>>>>>>>> from > >>>>>>>>>>>>>>>>>>>>>>> the base auto.offset.reset policy: > >>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>> - auto.offset.reset.max.age.ms now applies to > >> all > >>>>>>>>>>>>>> auto.offset.reset > >>>>>>>>>>>>>>>>>>>>> values > >>>>>>>>>>>>>>>>>>>>>>> (latest, earliest, by_duration, none). > >>>>>>>>>>>>>>>>>>>>>>> - For new ("hot") partitions, the consumer > >> resets to > >>>>>>>>>>>>>>>>>>>>> auto.offset.reset.new.partitions > >>>>>>>>>>>>>>>>>>>>>>> config setting > >>>>>>>>>>>>>>>>>>>>>>> - For existing ("cold") partitions, the base > >>>>>>>>>> auto.offset.reset > >>>>>>>>>>>>>>>>> policy > >>>>>>>>>>>>>>>>>>>>> continues > >>>>>>>>>>>>>>>>>>>>>>> to apply unchanged. > >>>>>>>>>>>>>>>>>>>>>>> - The new-partition reset behavior is > >> represented > >>>> by a > >>>>>>>>>>> separate > >>>>>>>>>>>>>>>>>>>>> internal config > >>>>>>>>>>>>>>>>>>>>>>> (auto.offset.reset.new.partitions, currently > >> fixed > >>>> to > >>>>>>>>>>>>> earliest). > >>>>>>>>>>>>>>>>> This > >>>>>>>>>>>>>>>>>>>>> decoupled design makes > >>>>>>>>>>>>>>>>>>>>>>> it straightforward to promote the behavior to a > >>>> public > >>>>>>>>>>>>>> user-facing > >>>>>>>>>>>>>>>>>>>>> configuration in a future KIP. > >>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>> Best Regards, > >>>>>>>>>>>>>>>>>>>>>>> Jiunn-Yang > >>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>> Chia-Ping Tsai <[email protected]> 於 > >> 2026年5月16日 > >>>>>> 清晨7:46 > >>>>>>>>>> 寫道: > >>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>> hi Jun > >>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>> I see what you mean now. The proposal from me > >> is > >>>> listed > >>>>>>>>>>> below: > >>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>> 1) Add auto.offset.reset.new.partitions with a > >>>> default > >>>>>>>>>> value > >>>>>>>>>>>>> of > >>>>>>>>>>>>>>>>>>>>> earliest. It fixes the data loss from both > >>>> by_duration and > >>>>>>>>>>>>> latest, > >>>>>>>>>>>>>> and > >>>>>>>>>>>>>>>>>>> it > >>>>>>>>>>>>>>>>>>>>> does not change the logic of > >>>> auto.offset.reset=earliest. > >>>>>>>>>>>>>>>>>>>>>>>> 2) Mark auto.offset.reset.new.partitions as an > >>>>>> internal > >>>>>>>>>>>>>>>>>>>>> configuration. auto.offset.reset.new > >>>> .partitions=earliest > >>>>>>>>>>> already > >>>>>>>>>>>>>>>>>>>>> addresses the issue, and we can discuss the use > >> cases > >>>> of > >>>>>> other > >>>>>>>>>>>>>> values > >>>>>>>>>>>>>>>>>>> in a > >>>>>>>>>>>>>>>>>>>>> separate KIP. > >>>>>>>>>>>>>>>>>>>>>>>> 3) Both configs, auto.offset.reset.new > >> .partitions > >>>> and > >>>>>>>>>>>>>>>>>>>>> auto.offset.reset.latest.max.age.ms, will be > >> applied > >>>> to > >>>>>> all > >>>>>>>>>> for > >>>>>>>>>>>>>>>>>>>>> consistency. > >>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>> WDYT? > >>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>> On 2026/05/15 20:53:20 Jun Rao via dev wrote: > >>>>>>>>>>>>>>>>>>>>>>>>> Hi, Chia-Ping, > >>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>> Thanks for the reply. > >>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>> 1. In the motivation section, the KIP says > >> "When a > >>>>>> Kafka > >>>>>>>>>>>>> topic > >>>>>>>>>>>>>> is > >>>>>>>>>>>>>>>>>>>>> expanded > >>>>>>>>>>>>>>>>>>>>>>>>> with new partitions, consumers using the > >> latest > >>>> auto > >>>>>>>>>> offset > >>>>>>>>>>>>>> reset > >>>>>>>>>>>>>>>>>>>>> policy > >>>>>>>>>>>>>>>>>>>>>>>>> will silently miss all records produced to > >> those > >>>>>>>>>> partitions > >>>>>>>>>>>>>> before > >>>>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>> consumer discovers them.". If a user sets > >>>>>>>>>>>>>>>>>>>>>>>>> auto.offset.reset=by_duration=1sec, the same > >>>> record > >>>>>> loss > >>>>>>>>>>>>> issue > >>>>>>>>>>>>>>>>> could > >>>>>>>>>>>>>>>>>>>>> also > >>>>>>>>>>>>>>>>>>>>>>>>> happen, right? > >>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>> 2. I was thinking auto.offset.reset.new > >>>> .partitions > >>>>>> will > >>>>>>>>>>> take > >>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>> same > >>>>>>>>>>>>>>>>>>>>>>>>> values as auto.offset.reset. So a user could > >> set > >>>> it > >>>>>>>>>>>>>> by_duration if > >>>>>>>>>>>>>>>>>>>>> needed. > >>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>> Jun > >>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>> On Thu, May 14, 2026 at 4:06 PM Chia-Ping > >> Tsai < > >>>>>>>>>>>>>>>>> [email protected] > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> wrote: > >>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>> hi Jun > >>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>> Thanks for the feedback. I might be missing > >>>> something > >>>>>>>>>>>>>> important > >>>>>>>>>>>>>>>>>>> from > >>>>>>>>>>>>>>>>>>>>> your > >>>>>>>>>>>>>>>>>>>>>>>>>> suggestion, so please bear with me as I try > >> to > >>>>>> clarify > >>>>>>>>>> with > >>>>>>>>>>>>> a > >>>>>>>>>>>>>> few > >>>>>>>>>>>>>>>>>>>>> questions: > >>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>> 1. Is there a strong use case for extending > >> this > >>>>>> logic to > >>>>>>>>>>>>>> other > >>>>>>>>>>>>>>>>>>> reset > >>>>>>>>>>>>>>>>>>>>>>>>>> policies? Unlike latest, policies like > >> earliest > >>>> or > >>>>>>>>>>>>> by_duration > >>>>>>>>>>>>>>>>>>> don't > >>>>>>>>>>>>>>>>>>>>> seem > >>>>>>>>>>>>>>>>>>>>>>>>>> to suffer from the same silent data loss > >> issue > >>>> when a > >>>>>>>>>>>>>> partition > >>>>>>>>>>>>>>>>> is > >>>>>>>>>>>>>>>>>>>>> expanded. > >>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>> 2. What values would we expect users to > >>>> configure for > >>>>>>>>>>>>>>>>>>>>>>>>>> auto.offset.reset.new.partitions? If they > >> set > >>>> it to > >>>>>>>>>>>>> earliest > >>>>>>>>>>>>>> or > >>>>>>>>>>>>>>>>>>>>> latest, > >>>>>>>>>>>>>>>>>>>>>>>>>> we might run into the exact same edge cases. > >> For > >>>>>> example, > >>>>>>>>>>>>> if a > >>>>>>>>>>>>>>>>>>>>> consumer is > >>>>>>>>>>>>>>>>>>>>>>>>>> offline for a while and a new partition is > >>>> created > >>>>>> during > >>>>>>>>>>>>> that > >>>>>>>>>>>>>>>>>>>>> downtime, > >>>>>>>>>>>>>>>>>>>>>>>>>> the user might actually want to skip to > >> latest > >>>> when > >>>>>>>>>>>>> resuming, > >>>>>>>>>>>>>>>>>>> rather > >>>>>>>>>>>>>>>>>>>>> than > >>>>>>>>>>>>>>>>>>>>>>>>>> reading from earliest just because the > >> partition > >>>> is > >>>>>>>>>>>>>> technically > >>>>>>>>>>>>>>>>>>>>> "new" to > >>>>>>>>>>>>>>>>>>>>>>>>>> the group. > >>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>> This is exactly why we opted for introducing > >> a > >>>>>> max.age > >>>>>>>>>>>>>> threshold. > >>>>>>>>>>>>>>>>>>> It > >>>>>>>>>>>>>>>>>>>>> gives > >>>>>>>>>>>>>>>>>>>>>>>>>> users a time-bound way to define what is > >>>> genuinely > >>>>>>>>>>> "hot/new" > >>>>>>>>>>>>>> and > >>>>>>>>>>>>>>>>>>>>> what is > >>>>>>>>>>>>>>>>>>>>>>>>>> just an old partition they haven't seen yet. > >>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>> Best, > >>>>>>>>>>>>>>>>>>>>>>>>>> Chia-Ping > >>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>> On 2026/05/14 20:48:09 Jun Rao via dev wrote: > >>>>>>>>>>>>>>>>>>>>>>>>>>> Hi, Jiunn-Yang, > >>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>> Thanks for the KIP. > >>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>> I find auto.offset.reset.latest.max.age a > >> bit > >>>>>> weird. It > >>>>>>>>>>>>> only > >>>>>>>>>>>>>>>>>>>>> applies when > >>>>>>>>>>>>>>>>>>>>>>>>>>> auto.offset.reset is latest. However, it > >> seems > >>>> that > >>>>>> the > >>>>>>>>>>>>>>>>> motivation > >>>>>>>>>>>>>>>>>>>>>>>>>> equally > >>>>>>>>>>>>>>>>>>>>>>>>>>> applies when auto.offset.reset is set to > >> other > >>>>>> values > >>>>>>>>>> like > >>>>>>>>>>>>>>>>>>>>> by_duration. > >>>>>>>>>>>>>>>>>>>>>>>>>> The > >>>>>>>>>>>>>>>>>>>>>>>>>>> intention is that we want to have a separate > >>>> way to > >>>>>>>>>>> control > >>>>>>>>>>>>>>>>> newly > >>>>>>>>>>>>>>>>>>>>> created > >>>>>>>>>>>>>>>>>>>>>>>>>>> partitions vs existing partitions when the > >> group > >>>>>> starts. > >>>>>>>>>>>>>> Have we > >>>>>>>>>>>>>>>>>>>>>>>>>> considered > >>>>>>>>>>>>>>>>>>>>>>>>>>> adding a new config like > >> auto.offset.reset.new > >>>>>>>>>>> .partitions? > >>>>>>>>>>>>>> If > >>>>>>>>>>>>>>>>>>> this > >>>>>>>>>>>>>>>>>>>>> new > >>>>>>>>>>>>>>>>>>>>>>>>>>> config is not set, the offset reset policy > >>>> defaults > >>>>>> to > >>>>>>>>>> the > >>>>>>>>>>>>>>>>> policy > >>>>>>>>>>>>>>>>>>>>> used > >>>>>>>>>>>>>>>>>>>>>>>>>> for > >>>>>>>>>>>>>>>>>>>>>>>>>>> existing partitions. The user could set it > >>>>>> explicitly to > >>>>>>>>>>>>>>>>> customize > >>>>>>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>>>> behavior for new partitions. > >>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>> Jun > >>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>> On Thu, May 7, 2026 at 5:07 AM 黃竣陽 < > >>>>>> [email protected]> > >>>>>>>>>>>>>> wrote: > >>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>> Hi all, > >>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>> I’d like to manually bump this thread. > >>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>> Best Regards, > >>>>>>>>>>>>>>>>>>>>>>>>>>>> Jiunn-Yang > >>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> 黃竣陽 <[email protected]> 於 2026年5月1日 > >> 晚上10:37 > >>>> 寫道: > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> Hello all, > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> Thanks for the feedback. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> DJ01/DJ02: > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> MetadataResponse bumps from v13 to v14. > >> The > >>>>>>>>>>>>>> PartitionMetadata > >>>>>>>>>>>>>>>>>>>>> struct > >>>>>>>>>>>>>>>>>>>>>>>>>>>> gains a new > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> field PartitionAgeMs (int64, default -1), > >>>> computed > >>>>>>>>>>>>>> server-side > >>>>>>>>>>>>>>>>>>> by > >>>>>>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>>>>> broker as > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> broker_current_time - > >> partition_creation_time. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> Also add the consumer heartbeat flow. when > >>>>>>>>>>>>>> MembershipManager > >>>>>>>>>>>>>>>>>>>>> detects > >>>>>>>>>>>>>>>>>>>>>>>>>> a > >>>>>>>>>>>>>>>>>>>>>>>>>>>> newly assigned > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> partition, it explicitly invalidates the > >>>> metadata > >>>>>> for > >>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>> affected > >>>>>>>>>>>>>>>>>>>>>>>>>> topic > >>>>>>>>>>>>>>>>>>>>>>>>>>>> and forces a fresh MetadataRequest > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> before making the offset reset decision, > >> even > >>>> if > >>>>>> the > >>>>>>>>>>>>> topic > >>>>>>>>>>>>>> ID > >>>>>>>>>>>>>>>>> is > >>>>>>>>>>>>>>>>>>>>>>>>>> already > >>>>>>>>>>>>>>>>>>>>>>>>>>>> in the cache. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> MB0: > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> The consumer learns the broker's maximum > >>>> supported > >>>>>>>>>>>>>>>>>>>>> MetadataResponse > >>>>>>>>>>>>>>>>>>>>>>>>>>>> version via the > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> ApiVersions negotiation at connection > >> time. > >>>> If the > >>>>>>>>>>>>>> negotiated > >>>>>>>>>>>>>>>>>>>>>>>>>> version is > >>>>>>>>>>>>>>>>>>>>>>>>>>>> unsupported, the consumer > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> knows the broker does not support > >>>> PartitionAgeMs > >>>>>> at > >>>>>>>>>> all > >>>>>>>>>>>>> and > >>>>>>>>>>>>>>>>> can > >>>>>>>>>>>>>>>>>>>>>>>>>> throw an > >>>>>>>>>>>>>>>>>>>>>>>>>>>> UnsupportedVersionException > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> immediately, rather than silently falling > >>>> back to > >>>>>>>>>> latest > >>>>>>>>>>>>>> and > >>>>>>>>>>>>>>>>>>>>> risking > >>>>>>>>>>>>>>>>>>>>>>>>>>>> data loss without any operator-visible > >> signal. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> MB1/MB2/MB3: > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> I have addressed these changes in the KIP. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> Best Regards, > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> Jiunn-Yang > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Chia-Ping Tsai <[email protected]> 於 > >>>> 2026年4月29日 > >>>>>>>>>>> 下午4:04 > >>>>>>>>>>>>>> 寫道: > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> hi David > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> I agree with the direction of moving the > >>>> 'age' > >>>>>>>>>>>>> resolution > >>>>>>>>>>>>>>>>> from > >>>>>>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>>>>> Heartbeat API to the Metadata API to keep > >> the > >>>>>> control > >>>>>>>>>>>>> plane > >>>>>>>>>>>>>>>>>>> clean. > >>>>>>>>>>>>>>>>>>>>> The > >>>>>>>>>>>>>>>>>>>>>>>>>> main > >>>>>>>>>>>>>>>>>>>>>>>>>>>> trade-off, as we noted before, is > >> introducing > >>>>>>>>>>> inter-broker > >>>>>>>>>>>>>>>>> clock > >>>>>>>>>>>>>>>>>>>>> skew. > >>>>>>>>>>>>>>>>>>>>>>>>>> The > >>>>>>>>>>>>>>>>>>>>>>>>>>>> Group Coordinator approach provided a > >> single > >>>>>> source of > >>>>>>>>>>>>> truth > >>>>>>>>>>>>>>>>> for > >>>>>>>>>>>>>>>>>>>>> time. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> However, realistically, this time skew > >>>> should be > >>>>>>>>>>>>>> negligible. > >>>>>>>>>>>>>>>>>>>>> Given > >>>>>>>>>>>>>>>>>>>>>>>>>> that > >>>>>>>>>>>>>>>>>>>>>>>>>>>> the max.age threshold will likely be > >>>> configured in > >>>>>>>>>>> minutes > >>>>>>>>>>>>>> or > >>>>>>>>>>>>>>>>>>>>> hours, a > >>>>>>>>>>>>>>>>>>>>>>>>>>>> typical NTP skew (in milliseconds) between > >>>> brokers > >>>>>>>>>> won't > >>>>>>>>>>>>>> impact > >>>>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>>>>> fallback decision. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Best, > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Chia-Ping > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> David Jacot via dev < > >> [email protected]> > >>>> 於 > >>>>>>>>>>>>> 2026年4月29日 > >>>>>>>>>>>>>>>>>>> 下午3:29 > >>>>>>>>>>>>>>>>>>>>> 寫道: > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Hi all, > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Thanks for the KIP! > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Sorry, I haven't really followed the > >>>> previous > >>>>>>>>>>>>>> conversation > >>>>>>>>>>>>>>>>>>> but I > >>>>>>>>>>>>>>>>>>>>>>>>>> took a > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> quick look at this one. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> DJ01: I don't clearly understand the > >> flow > >>>> with > >>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>>>>> ConsumerGroupHeartbeat > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> API after reading the KIP. There is a > >> new > >>>>>> boolean; > >>>>>>>>>> the > >>>>>>>>>>>>>> KIP > >>>>>>>>>>>>>>>>>>>>> states > >>>>>>>>>>>>>>>>>>>>>>>>>> that > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> partition ages are returned only when > >> this > >>>>>> boolean > >>>>>>>>>> is > >>>>>>>>>>>>>> set. > >>>>>>>>>>>>>>>>>>>>>>>>>> Implicitly, > >>>>>>>>>>>>>>>>>>>>>>>>>>>> this > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> means that when the consumer receives a > >> new > >>>>>>>>>> partition, > >>>>>>>>>>>>> it > >>>>>>>>>>>>>>>>> will > >>>>>>>>>>>>>>>>>>>>>>>>>> issue a > >>>>>>>>>>>>>>>>>>>>>>>>>>>> new > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> HB request with the boolean set to > >> receive > >>>> the > >>>>>> ages. > >>>>>>>>>>> Is > >>>>>>>>>>>>>> my > >>>>>>>>>>>>>>>>>>>>>>>>>>>> understanding > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> correct? We should perhaps clarify the > >> flow > >>>> and > >>>>>> also > >>>>>>>>>>>>>> explain > >>>>>>>>>>>>>>>>>>>>> how it > >>>>>>>>>>>>>>>>>>>>>>>>>>>> fits > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> into the existing flow (e.g. list > >> offsets, > >>>> fetch > >>>>>>>>>>>>> offsets, > >>>>>>>>>>>>>>>>>>> etc.). > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> DJ02: It my understanding is correct, I > >>>> wonder > >>>>>> if > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> the ConsumerGroupHeartbeat API is the > >> right > >>>>>> place > >>>>>>>>>> for > >>>>>>>>>>>>>> this > >>>>>>>>>>>>>>>>>>> given > >>>>>>>>>>>>>>>>>>>>>>>>>> that > >>>>>>>>>>>>>>>>>>>>>>>>>>>> a new > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> round trip is done anyway. > >> Alternatively, it > >>>>>> could > >>>>>>>>>>>>> simply > >>>>>>>>>>>>>>>>>>>>> include > >>>>>>>>>>>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> metadata. Generally, we should be rather > >>>>>> cautious > >>>>>>>>>>> about > >>>>>>>>>>>>>> not > >>>>>>>>>>>>>>>>>>>>>>>>>> overloading > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> the ConsumerGroupHeartbeat API with > >>>> unrelated > >>>>>>>>>>> concepts. > >>>>>>>>>>>>>> The > >>>>>>>>>>>>>>>>>>> API > >>>>>>>>>>>>>>>>>>>>> is > >>>>>>>>>>>>>>>>>>>>>>>>>> a > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> control plane API for assigning or > >> revoking > >>>>>>>>>>> partitions. > >>>>>>>>>>>>>> The > >>>>>>>>>>>>>>>>>>> fact > >>>>>>>>>>>>>>>>>>>>>>>>>> that > >>>>>>>>>>>>>>>>>>>>>>>>>>>> we > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> don't want to add it to the > >> corresponding > >>>>>> Streams > >>>>>>>>>> API > >>>>>>>>>>>>>> also > >>>>>>>>>>>>>>>>>>>>> suggests > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> something is not quite right. What > >> would we > >>>> do > >>>>>> if we > >>>>>>>>>>>>>> want to > >>>>>>>>>>>>>>>>>>>>>>>>>> support > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Streams in the future? > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Best, > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> David > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On Wed, Apr 29, 2026 at 12:28 AM > >> Muralidhar > >>>>>> Basani > >>>>>>>>>>> via > >>>>>>>>>>>>>> dev > >>>>>>>>>>>>>>>>> < > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> [email protected]> wrote: > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Hi Jiunn, > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Thank you for this great kip. Good to > >> know > >>>>>> about > >>>>>>>>>> the > >>>>>>>>>>>>>> gap. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> mb-0 - why a new v2 version bump for > >>>>>>>>>>>>>> RequestPartitionAges > >>>>>>>>>>>>>>>>>>>>> field. > >>>>>>>>>>>>>>>>>>>>>>>>>> Can a > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> tagged field (for ex: on response, > >>>>>> PartitionAges on > >>>>>>>>>>>>>>>>>>>>>>>>>> TopicPartitions) > >>>>>>>>>>>>>>>>>>>>>>>>>>>> be > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> used here and avoid version bump? > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> mb-1 - For the new config, is there a > >>>>>> recommended > >>>>>>>>>>>>> value > >>>>>>>>>>>>>> or > >>>>>>>>>>>>>>>>> a > >>>>>>>>>>>>>>>>>>>>>>>>>> ConfigDef > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> validator? Probably it should based on > >> the > >>>>>>>>>>>>>>>>>>> metadata.max.age.ms > >>>>>>>>>>>>>>>>>>>>> ? > >>>>>>>>>>>>>>>>>>>>>>>>>>>> Sizing > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> instructions can be part of javadocs I > >>>> guess. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> mb-2 - (minor) As there are no changes > >> to > >>>> Kafka > >>>>>>>>>>>>> Streams, > >>>>>>>>>>>>>>>>>>> would > >>>>>>>>>>>>>>>>>>>>> it > >>>>>>>>>>>>>>>>>>>>>>>>>> be > >>>>>>>>>>>>>>>>>>>>>>>>>>>> better > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> to add this new config > >>>>>>>>>>>>> auto.offset.reset.latest.max.age > >>>>>>>>>>>>>> to > >>>>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> StreamsConfig block list > >>>>>>>>>>>>>>>>>>>>>>>>>> (NON_CONFIGURABLE_CONSUMER_DEFAULT_CONFIGS) > >>>>>>>>>>>>>>>>>>>>>>>>>>>> for a > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> clear warning, incase users configure > >> it? > >>>> This > >>>>>> is > >>>>>>>>>> the > >>>>>>>>>>>>>> most > >>>>>>>>>>>>>>>>>>>>>>>>>> familiar > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> consumer config and users might easily > >>>>>> mistakenly > >>>>>>>>>>>>>> configure > >>>>>>>>>>>>>>>>>>>>> it. Or > >>>>>>>>>>>>>>>>>>>>>>>>>>>> may be > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> it's not worth it to add. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> mb-3 - (minor) The phrasing "the > >> consumer > >>>> falls > >>>>>>>>>> back > >>>>>>>>>>>>> to > >>>>>>>>>>>>>>>>>>>>> earliest" > >>>>>>>>>>>>>>>>>>>>>>>>>>>> reads as > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> if the config were being changed > >>>> per-partition > >>>>>>>>>> which > >>>>>>>>>>>>>> isn't > >>>>>>>>>>>>>>>>>>>>>>>>>> supported. > >>>>>>>>>>>>>>>>>>>>>>>>>>>> May > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> be rephrasing to something like > >> "consumer > >>>>>> resolves > >>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>> initial > >>>>>>>>>>>>>>>>>>>>>>>>>>>> position to > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> start offset for that partition" as if > >>>>>> earliest was > >>>>>>>>>>>>>> applied > >>>>>>>>>>>>>>>>>>> to > >>>>>>>>>>>>>>>>>>>>>>>>>> that > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> partition only and auto.offset.reset > >>>> config is > >>>>>>>>>>>>>> unchanged. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Thanks, > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Murali > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On Tue, Apr 28, 2026 at 2:48 PM 黃竣陽 < > >>>>>>>>>>>>>> [email protected]> > >>>>>>>>>>>>>>>>>>>>> wrote: > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Hi chia, > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> I have updated the KIP to include this > >>>> change. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Best Regards, > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Jiunn-Yang > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Chia-Ping Tsai <[email protected]> > >> 於 > >>>>>>>>>> 2026年4月28日 > >>>>>>>>>>>>>> 晚上8:03 > >>>>>>>>>>>>>>>>>>> 寫道: > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> hi Jiunn-Yang > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> chia_0: Should we expose the > >> partition > >>>>>> creation > >>>>>>>>>>> time > >>>>>>>>>>>>>> via > >>>>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>>> Admin > >>>>>>>>>>>>>>>>>>>>>>>>>>>> API? > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> I assume it would be valuable for > >> users to > >>>>>>>>>> diagnose > >>>>>>>>>>>>> and > >>>>>>>>>>>>>>>>>>>>>>>>>> troubleshoot > >>>>>>>>>>>>>>>>>>>>>>>>>>>> the > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> behavior of > >>>> auto.offset.reset.latest.max.age > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Best, > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Chia-Ping > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On 2026/04/28 10:47:58 黃竣陽 wrote: > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Hello everyone, > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> I would like to start a discussion > >> on > >>>>>> KIP-1327 > >>>>>>>>>>>>>> Prevent > >>>>>>>>>>>>>>>>> Hot > >>>>>>>>>>>>>>>>>>>>> Data > >>>>>>>>>>>>>>>>>>>>>>>>>>>> Loss > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> on > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Partition Expansion for Latest Policy > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> < > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>> > >>>>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>> > >>>>>> > >>>> > >> https://urldefense.com/v3/__https://cwiki.apache.org/confluence/x/KY4mGQ__;!!Ayb5sqE7!qF4q1QzF1RRgP61D7A2xuEai1ky7fepKDKFFvpNBuePikH-ULmT87TvuuZzy5kau5E4y5zMZAmfQQiwZomM$ > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> This proposal aims to introduces > >>>>>>>>>>>>>>>>>>>>>>>>>> auto.offset.reset.latest.max.age, > >>>>>>>>>>>>>>>>>>>>>>>>>>>> a > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> consumer config that lets the > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> latest reset policy distinguish > >> newly > >>>>>> expanded > >>>>>>>>>>>>> (hot) > >>>>>>>>>>>>>>>>>>>>> partitions > >>>>>>>>>>>>>>>>>>>>>>>>>>>> from > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> long-existing (cold) ones. Partitions > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> younger than the configured > >> threshold > >>>>>>>>>>> automatically > >>>>>>>>>>>>>> fall > >>>>>>>>>>>>>>>>>>>>> back > >>>>>>>>>>>>>>>>>>>>>>>>>> to > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> earliest, preventing silent data loss > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> during topic expansion without > >> forcing a > >>>>>> full > >>>>>>>>>>>>>> historical > >>>>>>>>>>>>>>>>>>>>>>>>>> reprocess. > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Best regards, > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Jiunn-Yang > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> > >>>>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>> > >>>>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>> > >>>>> > >>>> > >>> > >> > >
