Makes total sense.
On 2026/04/03 12:25:57 Chia-Ping Tsai wrote: > > AS7: I'll have one last try at persuasion here, but I expect I won't > succeed. In KIP-1274, the default group protocol for KafkaConsumer is > changing to "consumer". It is true that "classic" is still supported, but > users will need to explicitly enable it by setting > "group.protocol=classic". I think this means we could change the default > for "auto.offset.reset" to "by_start_time" in AK 5.0. Whether we want to do > it is a different matter. > > I also love this new policy, but changing the default right now is a bit > too eager for this KIP. I would prefer to implement it in 4.4.0 as an > opt-in feature and announce it to users first. If we see good adoption and > positive feedback from the community, we can then open a new KIP to discuss > changing the default in a future release. Let's take it one step at a time > > > Andrew Schofield <[email protected]> 於 2026年4月3日週五 下午7:58寫道: > > > Hi Jiunn-Yang, > > Thanks for your response. > > > > AS1-AS6: lgtm > > > > AS7: I'll have one last try at persuasion here, but I expect I won't > > succeed. In KIP-1274, the default group protocol for KafkaConsumer is > > changing to "consumer". It is true that "classic" is still supported, but > > users will need to explicitly enable it by setting > > "group.protocol=classic". I think this means we could change the default > > for "auto.offset.reset" to "by_start_time" in AK 5.0. Whether we want to do > > it is a different matter. > > > > AS8, AS9: lgtm > > > > AS10: I'm not a fan of the "Epoch-ms" wording, particularly in the Admin > > API javadoc. I would just use "The creation time of the group." or similar. > > > > AS11: I suspect you need to change StreamsGroupHeartbeatResponse too. > > Probably need a Kafka Streams expert to weigh in how > > `auto.offset.reset=by_start_time` would work for the consumer in a streams > > group. > > > > Thanks, > > Andrew > > > > On 2026/04/03 01:18:02 黃竣陽 wrote: > > > Hello all, > > > > > > AS4 > > > > > > I agree that bumping the version for request/response protocols provides > > a > > > meaningful benefit: it allows the consumer to distinguish between "the > > broker > > > does not support this feature" and "the broker supports it, but the > > group has no > > > creation time." This enables more actionable error messages. > > > > > > For __consumer_offsets records (ConsumerGroupMetadataValue and > > > StreamsGroupMetadataValue), I will keep tagged fields. These records > > have no version > > > negotiation. They are written and read internally by the broker. Tagged > > fields allow old brokers > > > to safely ignore unknown tags during log replay, and avoid the need to > > rewrite existing records > > > on upgrade. > > > > > > Best Regards, > > > Jiunn-Yang > > > > > > > Chia-Ping Tsai <[email protected]> 於 2026年4月3日 上午8:01 寫道: > > > > > > > > AS4 > > > > > > > > Bumping the version actually provides a significant benefit. It allows > > the new consumer to offer more actionable error messages to users, because > > it can clearly distinguish between "the broker is too old to support this > > feature" and "the broker supports it, but the group has no creation time." > > > > > > > > Furthermore, by bumping the version, the auto-generated protocol code > > can gracefully handle the serialization (e.g., ignoring the field if the > > client/broker is communicating with an older version). > > > > > > > > On 2026/04/02 15:04:39 黃竣陽 wrote: > > > >> Hi Andrew, > > > >> > > > >> Thanks for the thorough review. > > > >> > > > >> AS1: > > > >> The updated KIP now explicitly addresses these scenarios: > > > >> - Configuring auto.offset.reset=by_start_time with a classic consumer > > group throws > > > >> ConfigException at startup. > > > >> - Classic groups upgraded to modern groups cannot use by_start_time > > immediately, > > > >> because the group creation timestamp was not recorded at the time the > > group was originally > > > >> created. The consumer throws `GroupCreationTimeNotAvailableException` > > in this case. > > > >> Users must delete and recreate the group to obtain a fresh creation > > timestamp. > > > >> > > > >> AS2, AS3, AS5: Updated the KIP accordingly. > > > >> > > > >> AS4: > > > >> > > > >> Tagged fields fit well because GroupCreationTimeMs / CreationTimeMs > > is optional, > > > >> with a default value of -1 ("unknown") that has clear semantics, > > especially for pre-existing > > > >> groups. They are only serialized when non-default, so they add no > > overhead. Older > > > >> brokers simply ignore unknown tags when replaying __consumer_offsets, > > requiring no > > > >> record rewriting during upgrades. > > > >> > > > >> In contrast, a version bump would require expanding validVersions, > > adding version checks > > > >> across read/write paths, and provides no real benefit given the > > field’s optional nature and > > > >> well-defined default. This follows Kafka’s convention: use tagged > > fields for optional additions > > > >> with meaningful defaults, and version bumps for mandatory or semantic > > changes. > > > >> > > > >> AS6: > > > >> > > > >> Thanks for the clarification. I’ve incorporated this into the KIP. > > > >> > > > >> AS7: > > > >> > > > >> I agree that by_start_time better matches user expectations for the > > default offset reset policy. > > > >> However, since it is not supported by classic consumer groups and > > would raise a ConfigException > > > >> at startup, changing the default is only safe after the classic > > protocol is removed from KafkaConsumer. > > > >> Per KIP-1274, classic protocol support will be deprecated in Kafka > > 6.0. After that, the > > > >> default can be changed from latest to by_start_time. > > > >> > > > >> AS8: > > > >> > > > >> InvalidOffsetException is an abstract class that requires subclasses > > to implement partitions(), > > > >> implying the error is tied to specific partitions with invalid > > offsets. > > > >> > > > >> GroupCreationTimeNotAvailableException does not fit this model. The > > root cause is a missing > > > >> group-level timestamp, not an issue with any particular partition. > > Implementing partitions() > > > >> would require returning an empty or artificial set, which violates > > the API’s semantics. > > > >> > > > >> Therefore, I believe extending KafkaException is the better choice. > > > >> > > > >> AS9: > > > >> > > > >> Renamed to GroupCreationTimeNotAvailableException throughout the KIP. > > This better > > > >> describes the state ("not available") rather than the cause. > > > >> > > > >> Happy to hear any further feedback or suggestions. > > > >> > > > >> Best Regards, > > > >> Jiunn-Yang > > > >> > > > >> > > > >>> Andrew Schofield <[email protected]> 於 2026年4月2日 晚上8:34 寫道: > > > >>> > > > >>> Hi Jiunn-Yang, > > > >>> Thanks for this great KIP. Some comments. > > > >>> > > > >>> AS1: A limitation of this KIP is that it will not support classic > > consumer groups. I think this is not a problem and it will be a motivator > > for users to adopt modern consumer groups, but it will be necessary to test > > attempting to use the new policy with classic consumer groups and make sure > > that the ConsumerGroupDescription lacks the creation timestamp and so on. > > There is also the question of classic groups which are upgraded to modern > > consumer groups. > > > >>> AS2: It seems to me that you should also support streams groups, > > both in a StreamsGroupMetadataValue and StreamsGroupDescription. > > > >>> AS3: What you are describing as metadata log changes are actually > > records on the __consumer_offsets topic. > > > >>> AS4: While I understand the need to use tagged fields in the > > records, I do not see why you cannot bump the versions for > > ConsumerGroupHeartbeat and ConsumerGroupDescribe in order to support the > > new fields. > > > >>> AS5: In the Admin API, we already have an optional timestamp in > > TransactionDescription.transactionStartTimeMs which uses the type > > OptionalLong. Any reason not to use the same in ConsumerGroupDescription? > > > >>> AS6: I don't think share group support is needed. "latest" already > > starts at offset 0 for newly added partitions for share groups. > > > >>> AS7: Might you consider making "by_start_time" the default value for > > the auto.offset.reset consumer config in the next major release? I know > > that's a bold move, but I think what you're getting with the new option is > > what people expected "latest" to behave like. > > > >>> AS8: I wonder whether GroupCreationTimeUnknownException should > > extend the abstract InvalidOffsetException. > > > >>> AS9: To follow existing exception names, I think > > UnknownGroupCreationTimeException, GroupCreationTimeNotAvailableException > > (my favourite) or GroupCreationTimeNotFoundException would better match > > what we already have. wdyt? > > > >>> > > > >>> Thanks, > > > >>> Andrew > > > >>> > > > >>> On 2026/04/02 11:34:10 黃竣陽 wrote: > > > >>>> Hi chia, > > > >>>> > > > >>>> chia_13: > > > >>>> `ConsumerGroupDescription` now gains a new method > > `groupCreationTimeMs()`: > > > >>>> > > > >>>> `groupCreationTimeMs()` (`Optional<Long>`): the epoch-ms when this > > consumer group > > > >>>> was first created on the broker. `Optional.empty()` if unknown. > > > >>>> > > > >>>> Please take a look at the updated KIP and let us know if you have > > further questions. > > > >>>> > > > >>>> Best Regards, > > > >>>> Jiunn-Yang > > > >>>> > > > >>>>> Chia-Ping Tsai <[email protected]> 於 2026年4月2日 上午9:58 寫道: > > > >>>>> > > > >>>>> hi Jiunn > > > >>>>> > > > >>>>> chia_13: should we update the public API: ConsumerGroupDescription > > as well? > > > >>>>> > > > >>>>> Best, > > > >>>>> Chia-Ping > > > >>>>> > > > >>>>> On 2026/04/01 11:59:46 黃竣陽 wrote: > > > >>>>>> Hi chia, > > > >>>>>> > > > >>>>>> Thank you for the thoughtful feedback! > > > >>>>>> > > > >>>>>> chia_10: I have added a clarification in the Proposed Changes > > section to address this. In this case, > > > >>>>>> ListOffsetsRequest will resolve to the Log End Offset, but this > > is not a fallback to `latest`. The distinction > > > >>>>>> matters: `latest` is a direct seek to the Log End Offset, whereas > > `by_start_time` always anchors to the > > > >>>>>> group creation timestamp and lets the lookup result follow > > naturally. The consumer will begin consuming > > > >>>>>> any new records produced after this point normally. > > > >>>>>> > > > >>>>>> chia_11: I have introduced a new exception > > `GroupCreationTimeUnknownException` to signal > > > >>>>>> this specific condition. > > > >>>>>> > > > >>>>>> chia_12: I have updated the KIP to expose the group creation > > timestamp via `AdminClient.describeConsumerGroups()` > > > >>>>>> , accessible through > > `ConsumerGroupDescription.groupCreationTimeMs()`. This is backed by a new > > > >>>>>> `GroupCreationTimeMs` field in `ConsumerGroupDescribeResponse. > > > >>>>>> > > > >>>>>> Best Regards, > > > >>>>>> Jiunn-Yang > > > >>>>>> > > > >>>>>>> Chia-Ping Tsai <[email protected]> 於 2026年4月1日 下午2:33 寫道: > > > >>>>>>> > > > >>>>>>> hi Jiunn > > > >>>>>>> > > > >>>>>>> thanks for updating KIP. I have a couple of questions. > > > >>>>>>> > > > >>>>>>> chia_10: What happen if the group creation time is strictly > > greater than the timestamp of the latest record in the partition? Will the > > consumer fall back to the "latest" offset behaviour in this case? It could > > be good to elucidate that in the KIP > > > >>>>>>> > > > >>>>>>> chia_11: Could you specify which exact exception will be thrown > > when the group creation time is unknown > > > >>>>>>> > > > >>>>>>> chia_12: Since the group creation time is now a critical > > semantic anchor, should we also expose it via the `DescribeGroupsResponse`? > > > >>>>>>> > > > >>>>>>> Best, > > > >>>>>>> Chia-Ping > > > >>>>>>> > > > >>>>>>> On 2026/03/05 11:14:31 黃竣陽 wrote: > > > >>>>>>>> Hello everyone, > > > >>>>>>>> > > > >>>>>>>> I would like to start a discussion on KIP-1282: Prevent data > > loss during partition expansion for dynamically added partitions > > > >>>>>>>> <https://cwiki.apache.org/confluence/x/mIY8G> > > > >>>>>>>> > > > >>>>>>>> This proposal aims to introduce a new auto.offset.reset policy > > by_start_time, anchoring the > > > >>>>>>>> offset reset to the consumer's startup timestamp rather than > > partition discovery time, to prevent > > > >>>>>>>> silent data loss during partition expansion. > > > >>>>>>>> > > > >>>>>>>> Best regards, > > > >>>>>>>> Jiunn-Yang > > > >>>>>> > > > >>>>>> > > > >>>> > > > >>>> > > > >> > > > >> > > > > > > > > >
