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 >>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>> >>>>>>> >>>>>>> >>>>>> >>>> >>>> >>> >>
