The approach mentioned in the KIP also handles the correctness and retries for any failed segment uploads. It is LGTM.
To reduce the memory used by RemoteLogMetadataCache: - Shall we call removeFromEndOffsetIndex once the segment copy is finished successfully? (in RemotePartitionMetadataStore#handleRemoteLogSegmentMetadataUpdate method [1]) - TopicName can be large upto 249 chars. I'm not sure how to retrieve the topicName from topicId. [1]: https://sourcegraph.com/r/github.com/apache/kafka/-/blob/storage/src/main/java/org/apache/kafka/server/log/remote/metadata/storage/RemotePartitionMetadataStore.java?L80 Thanks, Kamal On Fri, Jul 10, 2026 at 6:48 AM Kamal Chandraprakash < [email protected]> wrote: > > Went over the code again, it is not clear to me how do we handle the > failed segment entries for the below case(s): > > Got it. The failed segment entries get eventually cleared when the > leaderEpoch itself is gone. > > One question that remains is: > - Are we fine with increased memory usage by RemoteLogMetadataCache? > - Another way is to configure the cleanup policy to [delete, compact] to > eventually delete any stale metadata entries. > This adds dependency that the user should configure the max upper bound. > (eg) 45 days, assuming all the user > topic retention is less than 30 days. > > > On Fri, Jul 10, 2026 at 6:31 AM Kamal Chandraprakash < > [email protected]> wrote: > >> Hi Lijun, >> >> Please find my comments inline: >> >> > the current key design also provides very >> little context. >> >> The Compaction process loads the record keys in memory. >> Keeping the key short helps in reducing the memory usage. >> Also, maintaining the (endOffset -> (brokerLeaderEpoch -> >> RemoteLogMetadataKey)) in >> RemoteLogMetadataCache might take up more space. >> >> I'm fine with either keys: >> >> topicId + partition + segmentId + state >> (or) >> topicId + topic + partition + endOffset + brokerLeaderEpoch + optional >> UPDATE >> >> > It doesn't tell users which broker (or leader epoch) >> Id of the broker that is uploading the segment is captured in the >> RemoteLogMetadata [1] >> >> > If a broker goes down unexpectedly during an upload >> attempt, how would we later identify that failed attempt and publish a >> tombstone for the corresponding segmentId? >> >> In your approach, after receiving the tombstone event, we are clearing up >> any stale metadata events. >> Went over the code again, it is not clear to me how do we handle the >> failed segment entries for the below case(s): >> >> Broker1 uploads the segment with start-offset-endOffset as 5-900 and >> fails to upload due to leader transition. >> Broker2 uploads the segment with start-offset-endOffset as 3-925 and >> succeeds to upload the segment. >> >> How do we clean the failed segment (5-900) uploaded by Broker1? Also, >> there is another case >> where the Broker2 uploads the segment with an offset range of 3-850. As >> log rotation is independent of brokers. >> >> [1]: >> https://sourcegraph.com/r/github.com/apache/kafka/-/blob/storage/api/src/main/java/org/apache/kafka/server/log/remote/storage/RemoteLogMetadata.java?L33 >> >> On Fri, Jul 10, 2026 at 3:02 AM Lijun Tong <[email protected]> >> wrote: >> >>> Hey Kamal, >>> >>> Thanks for the quick response. >>> >>> One concern is that upload failures don't happen exclusively while the >>> broker is online. If a broker goes down unexpectedly during an upload >>> attempt, how would we later identify that failed attempt and publish a >>> tombstone for the corresponding segmentId? >>> >>> From an operational perspective, the current key design also provides >>> very >>> little context. It doesn't tell users which broker (or leader epoch) >>> attempted to upload which log segment, making it difficult to reason >>> about >>> the behavior of tiered storage. In practice, it turns the remote metadata >>> into something of a black box. >>> >>> I believe the original key design, >>> TopicIdPartition:TopicName:Partition:EndOffset:BrokerLeaderEpoch, is much >>> more self-descriptive. It clearly identifies the log segment being >>> tracked >>> and provides enough context for users to understand and debug the >>> behavior >>> of the remote metadata manager. >>> >>> Best, >>> >>> Lijun Tong >>> >>> Kamal Chandraprakash <[email protected]> 于2026年7月9日周四 >>> 10:00写道: >>> >>> > Hi Lijun, >>> > >>> > Thanks for the follow up! >>> > >>> > > Since a new segmentId is >>> > generated every time a broker retries uploading the same log segment, >>> it >>> > doesn't provide a persistent identity for that log segment. >>> > >>> > RemoteLogManager tries to delete the remote log segment when it fails >>> to >>> > upload [1]. >>> > Only when encountering RetriableRemoteStorageException, it does not >>> invoke >>> > the `deleteRemoteLogSegment` call [2]. >>> > If we extend the behaviour to issue delete remote log segments >>> > (delete_seg_started and del_seg_finished events) in case of any upload >>> > failures. >>> > Does it simplify the overall approach? >>> > >>> > [1]: >>> > >>> > >>> https://sourcegraph.com/r/github.com/apache/kafka/-/blob/storage/src/main/java/org/apache/kafka/server/log/remote/storage/RemoteLogManager.java?L1117 >>> > [2]: >>> > >>> > >>> https://sourcegraph.com/r/github.com/apache/kafka/-/blob/storage/src/main/java/org/apache/kafka/server/log/remote/storage/RemoteLogManager.java?L1113 >>> > >>> > >>> > Thanks, >>> > Kamal >>> > >>> > On Thu, Jul 9, 2026 at 9:32 PM Lijun Tong <[email protected]> >>> wrote: >>> > >>> > > Hey Kamal, >>> > > >>> > > >>> > > I reviewed your implementation of keyed events. I noticed that the >>> key is >>> > > designed as topicId + partition + segmentId + stateId. >>> > > >>> > > I don't think we've fully discussed the tradeoffs or the potential >>> > > concurrency implications of this key design yet. >>> > > >>> > > My main concern is that segmentId doesn't seem stable enough to >>> represent >>> > > the lifecycle of a log segment in remote storage. Since a new >>> segmentId >>> > is >>> > > generated every time a broker retries uploading the same log >>> segment, it >>> > > doesn't provide a persistent identity for that log segment. >>> > > >>> > > Additionally, there isn't an explicit way to determine which log >>> segment >>> > a >>> > > given segmentId corresponds to. That raises the question of how we >>> would >>> > > publish tombstone messages for upload attempts that failed and were >>> later >>> > > retried. >>> > > >>> > > With this key design, it seems like concurrency control and cleanup >>> logic >>> > > could become fairly complicated. In contrast, with the current key >>> > design, >>> > > concurrency control is naturally straightforward, and the >>> correctness of >>> > > the cleanup logic is much easier to reason about and verify. >>> > > >>> > > >>> > > What do you think? >>> > > >>> > > >>> > > Best, >>> > > >>> > > Lijun Tong >>> > > >>> > > Kamal Chandraprakash <[email protected]> 于2026年7月7日周二 >>> > > 02:42写道: >>> > > >>> > > > Hi Lijun, >>> > > > >>> > > > I made a first pass on the >>> https://github.com/apache/kafka/pull/22459 >>> > > PR. >>> > > > Most of the changes in the schema layer may not be required. And, >>> we >>> > > should >>> > > > be able to achieve the outcome with minimal changes. >>> > > > >>> > > > I've opened a draft proposal to consider: >>> > > > https://github.com/apache/kafka/pull/22774. Could you take a look? >>> > > > >>> > > > Thanks, >>> > > > Kamal >>> > > > >>> > > > On Wed, Jun 3, 2026 at 12:20 PM Lijun Tong < >>> [email protected]> >>> > > > wrote: >>> > > > >>> > > > > Hey team, >>> > > > > >>> > > > > I have finished the code change for this KIP, and PR is here >>> > > > > https://github.com/apache/kafka/pull/22459. There are 2 commits >>> in >>> > > this >>> > > > > PR, >>> > > > > the first commit includes all the source code change, the second >>> > commit >>> > > > > includes all the test changes. >>> > > > > I have adopted some advices from this email chain and have also >>> > updated >>> > > > the >>> > > > > KIP and code accordingly. >>> > > > > >>> > > > > Would love to hear your thoughts. >>> > > > > >>> > > > > Thanks, >>> > > > > Lijun Tong >>> > > > > >>> > > > > jian fu <[email protected]> 于2026年4月11日周六 18:38写道: >>> > > > > >>> > > > > > Hi Kamal and Lijun Tong >>> > > > > > >>> > > > > > Maybe another approach (Not good solution) is when we sure >>> about >>> > the >>> > > > work >>> > > > > > is complete. we send all the keys' to null to delete all the >>> data. >>> > > > > > It mean the keys are: >>> > > > > > clusterid:topic:partition:offset: COPY_SEGMENT_FINISHED >>> > > > > > clusterid:topic:partition:offset: DELETE_SEGMENT_STARTED >>> > > > > > clusterid:topic:partition:offset: DELETE_SEGMENT_FINISHED >>> > > > > > ---------------- >>> > > > > > >>> > > > > > This solution won't change the old payload in the message. >>> Thus the >>> > > > > > solution is somehow strange. >>> > > > > > Or carry all complete message so that keep the latest maybe can >>> > work. >>> > > > > > >>> > > > > > BTW: There are four type message need to take care: >>> > > > > > RemoteLogSegmentMetadataRecord >>> > > > > > RemoteLogSegmentMetadataUpdateRecord >>> > > > > > RemotePartitionDeleteMetadataRecord >>> > > > > > RemoteLogSegmentMetadataSnapshotRecord >>> > > > > > >>> > > > > > Regards >>> > > > > > Jian >>> > > > > > >>> > > > > > >>> > > > > > Lijun Tong <[email protected]> 于2026年4月7日周二 08:35写道: >>> > > > > > >>> > > > > > > Hi Kamal, >>> > > > > > > >>> > > > > > > I now see what you mean regarding the DELETE_SEGMENT_STARTED >>> > > > handling. >>> > > > > > > >>> > > > > > > I was thinking that the broker's logic that currently >>> ignores >>> > log >>> > > > > > segment >>> > > > > > > messages when COPY_SEGMENT_STARTED doesn't exist might need >>> to be >>> > > > > updated >>> > > > > > > for the >>> > > > > > > new message format. Since the new message contains useful >>> > > > > information >>> > > > > > > like endOffset, topicID, and partition, it could provide >>> > sufficient >>> > > > > > context >>> > > > > > > to help >>> > > > > > > with the retry of deletion operations. This suggests the >>> broker >>> > > > might >>> > > > > > not >>> > > > > > > need to ignore these messages solely because of the absence >>> of >>> > > > > > > COPY_SEGMENT_STARTED. >>> > > > > > > >>> > > > > > > With the new key-based format, we would have enough >>> metadata in >>> > > the >>> > > > > > > DELETE_SEGMENT_STARTED event itself to: >>> > > > > > > - Identify the remote segment location >>> > > > > > > - Track and retry the deletion process >>> > > > > > > - Prevent orphaned segments in remote storage >>> > > > > > > >>> > > > > > > I believe this means that with the new keyed message >>> format, we >>> > > > could >>> > > > > > > avoid orphaned remote segments that might occur when >>> > > > > COPY_SEGMENT_STARTED >>> > > > > > > is cleaned >>> > > > > > > by the retention policy. The DELETE_SEGMENT_STARTED event >>> would >>> > > > carry >>> > > > > > all >>> > > > > > > the necessary information to complete the deletion, >>> regardless of >>> > > > > whether >>> > > > > > > the >>> > > > > > > base metadata still exists. >>> > > > > > > >>> > > > > > > For the old format messages, the same mechanism (ignoring >>> when >>> > > > > > > COPY_SEGMENT_STARTED is missing) could still apply, as those >>> > > messages >>> > > > > > lack >>> > > > > > > the necessary >>> > > > > > > information for independent processing. >>> > > > > > > >>> > > > > > > I'd appreciate your thoughts on this approach. >>> > > > > > > >>> > > > > > > Best, >>> > > > > > > Lijun Tong >>> > > > > > > >>> > > > > > > >>> > > > > > > Kamal Chandraprakash <[email protected]> >>> > 于2026年4月5日周日 >>> > > > > > > 17:37写道: >>> > > > > > > >>> > > > > > > > Hi Lijun, >>> > > > > > > > >>> > > > > > > > Yes, we can get on a call to close out on this. My concern >>> is >>> > > that >>> > > > if >>> > > > > > the >>> > > > > > > > same key is maintained for a given segment metadata >>> records, >>> > > > > > > > then the newer messages (COPY_FINSIHED, DELETE_STARTED) >>> might >>> > > > > > > > override/compact the previous COPY_STARTED events. >>> > > > > > > > This is not about the old / new format of messages. Assume >>> that >>> > > all >>> > > > > the >>> > > > > > > > messages in the topic are in the new format and contain >>> keys. >>> > > > > > > > >>> > > > > > > > From >>> > > > > > > > >>> > > > > > > >>> > > > > > >>> > > > > >>> > > > >>> > > >>> > >>> https://docs.confluent.io/kafka/design/log_compaction.html#topic-compaction >>> > > > > > > > : >>> > > > > > > > >>> > > > > > > > Topic compaction is a mechanism that allows you to retain >>> the >>> > > > latest >>> > > > > > > value >>> > > > > > > > for each message key in a topic, while discarding older >>> values. >>> > > It >>> > > > > > > > guarantees that the latest value for each message key is >>> always >>> > > > > > retained >>> > > > > > > > within the log of data contained in that topic, making it >>> ideal >>> > > for >>> > > > > use >>> > > > > > > > cases such as restoring state after system failure or >>> reloading >>> > > > > caches >>> > > > > > > > after application restarts. >>> > > > > > > > >>> > > > > > > > Thanks, >>> > > > > > > > Kamal >>> > > > > > > > >>> > > > > > > > On Sun, Apr 5, 2026 at 11:37 PM Lijun Tong < >>> > > > [email protected]> >>> > > > > > > > wrote: >>> > > > > > > > >>> > > > > > > > > Hi Kamal, >>> > > > > > > > > >>> > > > > > > > > Thanks for raising this. >>> > > > > > > > > >>> > > > > > > > > Currently, only the existing version of >>> > > > > > > > > RemoteLogSegmentMetadataUpdateRecord >>> > > > > > > > > does not include those fields. We rely on the time-based >>> > > > retention >>> > > > > > > policy >>> > > > > > > > > for cleanup, and this does not impact the ability to >>> rebuild >>> > > the >>> > > > > > > > > RemoteLogMetadataCache. >>> > > > > > > > > >>> > > > > > > > > The cache reconstruction should still work correctly >>> because >>> > it >>> > > > > > depends >>> > > > > > > > on >>> > > > > > > > > the value, and we have not removed any fields from the >>> value. >>> > > > > > > > > >>> > > > > > > > > Regarding the scenario where there are 10 remote >>> segments and >>> > > the >>> > > > > > > > > __remote_log_metadata topic contains only >>> > COPY_SEGMENT_FINISHED >>> > > > > > events: >>> > > > > > > > the >>> > > > > > > > > COPY_SEGMENT_STARTED events will not be compacted in this >>> > case, >>> > > > > since >>> > > > > > > > > messages with a null key are not subject to compaction. >>> > > > > > > > > >>> > > > > > > > > Once older-format messages are cleaned up by the >>> time-based >>> > > > > retention >>> > > > > > > > > policy and compaction is enabled, records with the same >>> key >>> > > will >>> > > > be >>> > > > > > > > > compacted asynchronously and correctly. Given this, I >>> don’t >>> > > > believe >>> > > > > > we >>> > > > > > > > need >>> > > > > > > > > to introduce a separate key for COPY_SEGMENT_STARTED >>> events. >>> > > > > > > > > >>> > > > > > > > > Happy to jump on a call if it’s easier to discuss >>> further. >>> > > > > > > > > >>> > > > > > > > > Best, >>> > > > > > > > > >>> > > > > > > > > Lijun Tong >>> > > > > > > > > >>> > > > > > > > > Lijun Tong <[email protected]> 于2026年4月5日周日 >>> 10:56写道: >>> > > > > > > > > >>> > > > > > > > > > Hey Kamal, >>> > > > > > > > > > >>> > > > > > > > > > I am not very clear on what's the question you >>> mentioned >>> > > > above, I >>> > > > > > am >>> > > > > > > > > > happy to jump to a call to discuss further, and I >>> lived in >>> > > PST >>> > > > > time >>> > > > > > > > zone. >>> > > > > > > > > > Maybe we can meet online through google meet? >>> > > > > > > > > > >>> > > > > > > > > > Thanks, >>> > > > > > > > > > Lijun Tong >>> > > > > > > > > > >>> > > > > > > > > > Kamal Chandraprakash <[email protected]> >>> > > > > 于2026年4月1日周三 >>> > > > > > > > > > 02:38写道: >>> > > > > > > > > > >>> > > > > > > > > >> Hi Lijun, >>> > > > > > > > > >> >>> > > > > > > > > >> Thanks for the update! I'm still not clear on this. >>> > > > > > > > > >> >>> > > > > > > > > >> The RemoteLogSegmentMetadataUpdateRecord does not >>> contain >>> > > the >>> > > > > > below >>> > > > > > > > > fields >>> > > > > > > > > >> compared to RemoteLogSegmentMetadataRecord: >>> > > > > > > > > >> >>> > > > > > > > > >> - startOffset >>> > > > > > > > > >> - endOffset (will be added as a tagged field) >>> > > > > > > > > >> - MaxTimestampMs >>> > > > > > > > > >> - SegmentLeaderEpochs >>> > > > > > > > > >> - SegmentSizeInBytes and >>> > > > > > > > > >> - TxnIndexEmpty >>> > > > > > > > > >> >>> > > > > > > > > >> When a broker gets restarted, will it be able to >>> rebuild >>> > > > > > > > > >> the RemoteLogMetadataCache? Assume that there are 10 >>> > remote >>> > > > > > > > > >> segments and the __remote_log_metadata topic contains >>> only >>> > > the >>> > > > > > > > > >> COPY_SEGMENT_FINISHED events; the COPY_SEGMENT_STARTED >>> > event >>> > > > > > > > > >> gets compacted as the key is the same. >>> > > > > > > > > >> >>> > > > > > > > > >> Do we need a separate key for the COPY_SEGMENT_STARTED >>> > event >>> > > > and >>> > > > > > > > another >>> > > > > > > > > >> key for the remaining states? >>> > > > > > > > > >> >>> > > > > > > > > >> Current key format: >>> > > > TopicIdPartition:EndOffset:BrokerLeaderEpoch >>> > > > > > > > > >> Proposed key format: >>> > > > > > > TopicIdPartition:EndOffset:BrokerLeaderEpoch:x/y >>> > > > > > > > > >> where >>> > > > > > > > > >> x denotes a identifier for COPY_SEGMENT_STARTED and y >>> > denote >>> > > > for >>> > > > > > all >>> > > > > > > > the >>> > > > > > > > > >> other events. >>> > > > > > > > > >> >>> > > > > > > > > >> Thanks, >>> > > > > > > > > >> Kamal >>> > > > > > > > > >> >>> > > > > > > > > >> >>> > > > > > > > > >> >>> > > > > > > > > >> On Tue, Mar 31, 2026 at 8:23 AM Lijun Tong < >>> > > > > > [email protected] >>> > > > > > > > >>> > > > > > > > > >> wrote: >>> > > > > > > > > >> >>> > > > > > > > > >> > Hi Kamal, >>> > > > > > > > > >> > >>> > > > > > > > > >> > The scenario you described only happened with the >>> old >>> > > > version >>> > > > > > > > > >> > RemoteLogSegmentUpdateMetadata message, since the >>> > > endOffset >>> > > > > will >>> > > > > > > be >>> > > > > > > > > >> added >>> > > > > > > > > >> > in the new RemoteLogSegmentUpdateMetadata schema. >>> For >>> > the >>> > > > > > existing >>> > > > > > > > > >> > RemoteLogSegmentUpdateMetadata messages, we rely on >>> the >>> > > time >>> > > > > > based >>> > > > > > > > > >> > retention policy to clean up. Does that make sense? >>> > > > > > > > > >> > >>> > > > > > > > > >> > Best, >>> > > > > > > > > >> > Lijun Tong >>> > > > > > > > > >> > >>> > > > > > > > > >> > Kamal Chandraprakash < >>> [email protected]> >>> > > > > > > 于2026年3月30日周一 >>> > > > > > > > > >> > 18:14写道: >>> > > > > > > > > >> > >>> > > > > > > > > >> > > Hi Lijun, >>> > > > > > > > > >> > > >>> > > > > > > > > >> > > RemoteLogSegmentUpdateMetadata event does not >>> have all >>> > > the >>> > > > > > > > > >> > > fields/attributes similar to >>> RemoteLogSegmentMetadata >>> > > > event. >>> > > > > > > > > >> > > >>> > > > > > > > > >> > > Assume that after compaction, for a segment, we >>> have >>> > > only >>> > > > > > > > > >> > > COPY_SEGMENT_FINISHED records. How do you plan to >>> > > retrieve >>> > > > > the >>> > > > > > > > other >>> > > > > > > > > >> > fields >>> > > > > > > > > >> > > after broker restart? >>> > > > > > > > > >> > > >>> > > > > > > > > >> > > Thanks, >>> > > > > > > > > >> > > Kamal >>> > > > > > > > > >> > > >>> > > > > > > > > >> > > On Mon, Mar 30, 2026, 23:22 Lijun Tong < >>> > > > > > [email protected] >>> > > > > > > > >>> > > > > > > > > >> wrote: >>> > > > > > > > > >> > > >>> > > > > > > > > >> > > > Hi Kamal, >>> > > > > > > > > >> > > > >>> > > > > > > > > >> > > > Thanks for taking another look at the KIP. >>> > > > > > > > > >> > > > 1. I have removed the left-over line about using >>> > > another >>> > > > > new >>> > > > > > > > topic >>> > > > > > > > > >> from >>> > > > > > > > > >> > > the >>> > > > > > > > > >> > > > KIP. >>> > > > > > > > > >> > > > 2. >>> > > > > > > > > >> > > > >>> > > > > > > > > >> > > > > 2. Assume that the topic is enabled with >>> > compaction >>> > > > and >>> > > > > > only >>> > > > > > > > one >>> > > > > > > > > >> > event >>> > > > > > > > > >> > > is >>> > > > > > > > > >> > > > > maintained per segment. If there is a >>> transient >>> > > error >>> > > > in >>> > > > > > the >>> > > > > > > > > >> remote >>> > > > > > > > > >> > log >>> > > > > > > > > >> > > > > deletion, >>> > > > > > > > > >> > > > > then the COPY_SEGMENT started / finished >>> > events >>> > > > > might >>> > > > > > be >>> > > > > > > > > >> > compacted >>> > > > > > > > > >> > > by >>> > > > > > > > > >> > > > > the DELETE_SEGMENT_STARTED events. If the >>> broker >>> > is >>> > > > > > > restarted >>> > > > > > > > > >> during >>> > > > > > > > > >> > > > > this time, will there be dangling remote >>> log >>> > > > > segments? >>> > > > > > > > > >> Currently, >>> > > > > > > > > >> > > > > during restart, the broker discards the >>> events if >>> > it >>> > > > > does >>> > > > > > > not >>> > > > > > > > > see >>> > > > > > > > > >> the >>> > > > > > > > > >> > > > > COPY_SEGMENT_STARTED events. >>> > > > > > > > > >> > > > >>> > > > > > > > > >> > > > >>> > > > > > > > > >> > > > I am glad you asked this question, I didn't >>> mention >>> > > this >>> > > > > > part >>> > > > > > > in >>> > > > > > > > > my >>> > > > > > > > > >> > > current >>> > > > > > > > > >> > > > design to avoid distractions from the main >>> design, >>> > > but I >>> > > > > > plan >>> > > > > > > to >>> > > > > > > > > add >>> > > > > > > > > >> > > > another background thread to clean up all the >>> stale >>> > > > > messages >>> > > > > > > by >>> > > > > > > > > >> > comparing >>> > > > > > > > > >> > > > the message's endOffset with the topic >>> partition's >>> > log >>> > > > > start >>> > > > > > > > > >> offset. I >>> > > > > > > > > >> > > > believe this would help remove all the dangling >>> > > > messages. >>> > > > > > > > > >> > > > >>> > > > > > > > > >> > > > Thanks, >>> > > > > > > > > >> > > > Lijun TOng >>> > > > > > > > > >> > > > >>> > > > > > > > > >> > > > Kamal Chandraprakash < >>> > [email protected]> >>> > > > > > > > > 于2026年3月29日周日 >>> > > > > > > > > >> > > > 22:48写道: >>> > > > > > > > > >> > > > >>> > > > > > > > > >> > > > > Hi Lijun, >>> > > > > > > > > >> > > > > >>> > > > > > > > > >> > > > > Sorry for the late reply. Went over the KIP >>> again. >>> > > > > Overall >>> > > > > > > > LGTM. >>> > > > > > > > > >> Few >>> > > > > > > > > >> > > > > points: >>> > > > > > > > > >> > > > > >>> > > > > > > > > >> > > > > > This KIP aims to solve this issue through >>> > > > introducing >>> > > > > > > > another >>> > > > > > > > > >> > > compacted >>> > > > > > > > > >> > > > > topic for the brokers to bootstrap the state >>> from >>> > > > > > > > > >> > > > > >>> > > > > > > > > >> > > > > 1. Shall we update the motivation section to >>> > mention >>> > > > > that >>> > > > > > > > > another >>> > > > > > > > > >> > topic >>> > > > > > > > > >> > > > is >>> > > > > > > > > >> > > > > not introduced? >>> > > > > > > > > >> > > > > 2. Assume that the topic is enabled with >>> > compaction >>> > > > and >>> > > > > > only >>> > > > > > > > one >>> > > > > > > > > >> > event >>> > > > > > > > > >> > > is >>> > > > > > > > > >> > > > > maintained per segment. If there is a >>> transient >>> > > error >>> > > > in >>> > > > > > the >>> > > > > > > > > >> remote >>> > > > > > > > > >> > log >>> > > > > > > > > >> > > > > deletion, >>> > > > > > > > > >> > > > > then the COPY_SEGMENT started / finished >>> > events >>> > > > > might >>> > > > > > be >>> > > > > > > > > >> > compacted >>> > > > > > > > > >> > > by >>> > > > > > > > > >> > > > > the DELETE_SEGMENT_STARTED events. If the >>> broker >>> > is >>> > > > > > > restarted >>> > > > > > > > > >> during >>> > > > > > > > > >> > > > > this time, will there be dangling remote >>> log >>> > > > > segments? >>> > > > > > > > > >> Currently, >>> > > > > > > > > >> > > > > during restart, the broker discards the >>> events if >>> > it >>> > > > > does >>> > > > > > > not >>> > > > > > > > > see >>> > > > > > > > > >> the >>> > > > > > > > > >> > > > > COPY_SEGMENT_STARTED events. >>> > > > > > > > > >> > > > > >>> > > > > > > > > >> > > > > Thanks, >>> > > > > > > > > >> > > > > Kamal >>> > > > > > > > > >> > > > > >>> > > > > > > > > >> > > > > On Thu, Mar 26, 2026 at 5:08 AM Lijun Tong < >>> > > > > > > > > >> [email protected]> >>> > > > > > > > > >> > > > > wrote: >>> > > > > > > > > >> > > > > >>> > > > > > > > > >> > > > > > Hi, >>> > > > > > > > > >> > > > > > >>> > > > > > > > > >> > > > > > I have started a Vote thread for this KIP, >>> > > > considering >>> > > > > > all >>> > > > > > > > > >> > questions >>> > > > > > > > > >> > > > > raised >>> > > > > > > > > >> > > > > > so far have been answered. I am happy to >>> > continue >>> > > > the >>> > > > > > > > > >> discussion if >>> > > > > > > > > >> > > > > needed, >>> > > > > > > > > >> > > > > > otherwise, this is a friendly reminder on >>> the >>> > vote >>> > > > for >>> > > > > > > this >>> > > > > > > > > KIP. >>> > > > > > > > > >> > > > > > >>> > > > > > > > > >> > > > > > Thanks, >>> > > > > > > > > >> > > > > > Lijun Tong >>> > > > > > > > > >> > > > > > >>> > > > > > > > > >> > > > > > >>> > > > > > > > > >> > > > > > >>> > > > > > > > > >> > > > > > Lijun Tong <[email protected]> >>> > > 于2026年1月19日周一 >>> > > > > > > 17:59写道: >>> > > > > > > > > >> > > > > > >>> > > > > > > > > >> > > > > > > Hey Kamal, >>> > > > > > > > > >> > > > > > > >>> > > > > > > > > >> > > > > > > Thanks for raising these questions. Here >>> are >>> > my >>> > > > > > > responses >>> > > > > > > > to >>> > > > > > > > > >> your >>> > > > > > > > > >> > > > > > > questions: >>> > > > > > > > > >> > > > > > > Q1 and Q2: >>> > > > > > > > > >> > > > > > > I think both questions boil down to how to >>> > > release >>> > > > > > this >>> > > > > > > > new >>> > > > > > > > > >> > > feature, >>> > > > > > > > > >> > > > > both >>> > > > > > > > > >> > > > > > > questions are valid concerns. The >>> solution I >>> > > have >>> > > > in >>> > > > > > > mind >>> > > > > > > > is >>> > > > > > > > > >> this >>> > > > > > > > > >> > > > > feature >>> > > > > > > > > >> > > > > > > is *gated by the metadata version*. The >>> new >>> > > > > tombstone >>> > > > > > > > > >> semantics >>> > > > > > > > > >> > and >>> > > > > > > > > >> > > > the >>> > > > > > > > > >> > > > > > > additional fields (for example in >>> > > > > > > > > >> RemoteLogSegmentUpdateRecord) >>> > > > > > > > > >> > are >>> > > > > > > > > >> > > > > only >>> > > > > > > > > >> > > > > > > enabled once the cluster metadata version >>> is >>> > > > > upgraded >>> > > > > > to >>> > > > > > > > the >>> > > > > > > > > >> > > version >>> > > > > > > > > >> > > > > that >>> > > > > > > > > >> > > > > > > introduces this feature. As long as the >>> > cluster >>> > > > > > metadata >>> > > > > > > > > >> version >>> > > > > > > > > >> > is >>> > > > > > > > > >> > > > not >>> > > > > > > > > >> > > > > > > bumped, the system will not produce >>> tombstone >>> > > > > records. >>> > > > > > > > > >> Therefore, >>> > > > > > > > > >> > > > > during >>> > > > > > > > > >> > > > > > > rolling upgrades (mixed 4.2/4.3 brokers), >>> the >>> > > > > feature >>> > > > > > > > > remains >>> > > > > > > > > >> > > > > effectively >>> > > > > > > > > >> > > > > > > disabled. Tombstones will only start being >>> > > > produced >>> > > > > > > after >>> > > > > > > > > the >>> > > > > > > > > >> > > > metadata >>> > > > > > > > > >> > > > > > > version is upgraded, at which point all >>> > brokers >>> > > > are >>> > > > > > > > already >>> > > > > > > > > >> > > required >>> > > > > > > > > >> > > > to >>> > > > > > > > > >> > > > > > > support the new behavior. >>> > > > > > > > > >> > > > > > > >>> > > > > > > > > >> > > > > > > Since Kafka does not support metadata >>> version >>> > > > > > downgrades >>> > > > > > > > at >>> > > > > > > > > >> the >>> > > > > > > > > >> > > > moment, >>> > > > > > > > > >> > > > > > > once a metadata version that supports this >>> > > feature >>> > > > > is >>> > > > > > > > > >> enabled, it >>> > > > > > > > > >> > > > > cannot >>> > > > > > > > > >> > > > > > be >>> > > > > > > > > >> > > > > > > downgraded to a version that does not >>> support >>> > > it. >>> > > > I >>> > > > > > will >>> > > > > > > > add >>> > > > > > > > > >> > these >>> > > > > > > > > >> > > > > > details >>> > > > > > > > > >> > > > > > > to the KIP later. >>> > > > > > > > > >> > > > > > > Q3. This is an *editing mistake* in the >>> KIP. >>> > > > Thanks >>> > > > > > for >>> > > > > > > > > >> pointing >>> > > > > > > > > >> > it >>> > > > > > > > > >> > > > > out — >>> > > > > > > > > >> > > > > > > the enum value has already been corrected >>> in >>> > the >>> > > > > > latest >>> > > > > > > > > >> revision >>> > > > > > > > > >> > to >>> > > > > > > > > >> > > > > > remove >>> > > > > > > > > >> > > > > > > the unused placeholder and keep the state >>> > values >>> > > > > > > > contiguous >>> > > > > > > > > >> and >>> > > > > > > > > >> > > > > > consistent. >>> > > > > > > > > >> > > > > > > Q4. I don't foresee the quota mechanism >>> will >>> > > > > interfere >>> > > > > > > > with >>> > > > > > > > > >> the >>> > > > > > > > > >> > > state >>> > > > > > > > > >> > > > > > > transition in any way so far, let me know >>> if >>> > any >>> > > > > > concern >>> > > > > > > > > hits >>> > > > > > > > > >> > you. >>> > > > > > > > > >> > > > > > > >>> > > > > > > > > >> > > > > > > Thanks, >>> > > > > > > > > >> > > > > > > Lijun >>> > > > > > > > > >> > > > > > > >>> > > > > > > > > >> > > > > > > Kamal Chandraprakash < >>> > > > > [email protected]> >>> > > > > > > > > >> > > 于2026年1月18日周日 >>> > > > > > > > > >> > > > > > > 00:40写道: >>> > > > > > > > > >> > > > > > > >>> > > > > > > > > >> > > > > > >> Hi Lijun, >>> > > > > > > > > >> > > > > > >> >>> > > > > > > > > >> > > > > > >> Thanks for updating the KIP! >>> > > > > > > > > >> > > > > > >> >>> > > > > > > > > >> > > > > > >> The updated migration plan looks clean >>> to me. >>> > > Few >>> > > > > > > > > questions: >>> > > > > > > > > >> > > > > > >> >>> > > > > > > > > >> > > > > > >> 1. The ConsumerTask in 4.2 Kafka build >>> does >>> > not >>> > > > > > handle >>> > > > > > > > the >>> > > > > > > > > >> > > tombstone >>> > > > > > > > > >> > > > > > >> records. Should the tombstone records be >>> sent >>> > > > only >>> > > > > > when >>> > > > > > > > all >>> > > > > > > > > >> the >>> > > > > > > > > >> > > > > brokers >>> > > > > > > > > >> > > > > > >> are >>> > > > > > > > > >> > > > > > >> upgraded to 4.3 version? >>> > > > > > > > > >> > > > > > >> >>> > > > > > > > > >> > > > > > >> 2. Once all the brokers are upgraded and >>> the >>> > > > > > > > > >> > __remote_log_metadata >>> > > > > > > > > >> > > > > topic >>> > > > > > > > > >> > > > > > >> cleanup policy changed to compact. Then, >>> > > > > downgrading >>> > > > > > > the >>> > > > > > > > > >> brokers >>> > > > > > > > > >> > > is >>> > > > > > > > > >> > > > > not >>> > > > > > > > > >> > > > > > >> allowed as the records without key will >>> throw >>> > > an >>> > > > > > error >>> > > > > > > > > while >>> > > > > > > > > >> > > > producing >>> > > > > > > > > >> > > > > > the >>> > > > > > > > > >> > > > > > >> compacted topic. Shall we mention this >>> in the >>> > > > > > > > compatibility >>> > > > > > > > > >> > > section? >>> > > > > > > > > >> > > > > > >> >>> > > > > > > > > >> > > > > > >> 3. In the RemoteLogSegmentState Enum, >>> why is >>> > > the >>> > > > > > value >>> > > > > > > 1 >>> > > > > > > > > >> marked >>> > > > > > > > > >> > as >>> > > > > > > > > >> > > > > > unused? >>> > > > > > > > > >> > > > > > >> >>> > > > > > > > > >> > > > > > >> 4. Regarding the key >>> > > > > > > > > >> > > (TopicIdPartition:EndOffset:BrokerLeaderEpoch), >>> > > > > > > > > >> > > > > we >>> > > > > > > > > >> > > > > > >> may >>> > > > > > > > > >> > > > > > >> have to check for scenarios where there >>> is >>> > > > segment >>> > > > > > lag >>> > > > > > > > due >>> > > > > > > > > to >>> > > > > > > > > >> > > remote >>> > > > > > > > > >> > > > > log >>> > > > > > > > > >> > > > > > >> write quota. Will the state transition >>> work >>> > > > > > correctly? >>> > > > > > > > Will >>> > > > > > > > > >> come >>> > > > > > > > > >> > > > back >>> > > > > > > > > >> > > > > to >>> > > > > > > > > >> > > > > > >> this later. >>> > > > > > > > > >> > > > > > >> >>> > > > > > > > > >> > > > > > >> Thanks, >>> > > > > > > > > >> > > > > > >> Kamal >>> > > > > > > > > >> > > > > > >> >>> > > > > > > > > >> > > > > > >> On Fri, Jan 16, 2026 at 4:50 AM jian fu < >>> > > > > > > > > >> [email protected]> >>> > > > > > > > > >> > > > wrote: >>> > > > > > > > > >> > > > > > >> >>> > > > > > > > > >> > > > > > >> > Hi Lijun and Kamal >>> > > > > > > > > >> > > > > > >> > I also think we don't need to keep >>> > > > delJIanpolicy >>> > > > > in >>> > > > > > > > final >>> > > > > > > > > >> > > > config,if >>> > > > > > > > > >> > > > > > >> so,we >>> > > > > > > > > >> > > > > > >> > should always keep remembering all of >>> our >>> > > topic >>> > > > > > > > retention >>> > > > > > > > > >> time >>> > > > > > > > > >> > > > must >>> > > > > > > > > >> > > > > > less >>> > > > > > > > > >> > > > > > >> > than the value,right?It is one protect >>> with >>> > > > risk >>> > > > > > > > > involved. >>> > > > > > > > > >> > > > > > >> > Regards >>> > > > > > > > > >> > > > > > >> > JIan >>> > > > > > > > > >> > > > > > >> > >>> > > > > > > > > >> > > > > > >> > >>> > > > > > > > > >> > > > > > >> > >>> > > > > > > > > >> > > > > > >> > Lijun Tong <[email protected] >>> > > > >于2026年1月16日 >>> > > > > > > > > 周五06:45写道: >>> > > > > > > > > >> > > > > > >> > >>> > > > > > > > > >> > > > > > >> > > Hey Kamal, >>> > > > > > > > > >> > > > > > >> > > >>> > > > > > > > > >> > > > > > >> > > Some additional points about the Q4, >>> > > > > > > > > >> > > > > > >> > > >>> > > > > > > > > >> > > > > > >> > > > The user can decide when to change >>> > their >>> > > > > > internal >>> > > > > > > > > topic >>> > > > > > > > > >> > > > cleanup >>> > > > > > > > > >> > > > > > >> policy >>> > > > > > > > > >> > > > > > >> > to >>> > > > > > > > > >> > > > > > >> > > > compact. If someone retains >>> > > > > > > > > >> > > > > > >> > > > the data in the remote storage for >>> 3 >>> > > > months, >>> > > > > > then >>> > > > > > > > > they >>> > > > > > > > > >> can >>> > > > > > > > > >> > > > > migrate >>> > > > > > > > > >> > > > > > >> to >>> > > > > > > > > >> > > > > > >> > the >>> > > > > > > > > >> > > > > > >> > > > compacted topic after 3 months >>> > > > > > > > > >> > > > > > >> > > > post rolling out this change. And, >>> > update >>> > > > > their >>> > > > > > > > > cleanup >>> > > > > > > > > >> > > policy >>> > > > > > > > > >> > > > > to >>> > > > > > > > > >> > > > > > >> > > [compact, >>> > > > > > > > > >> > > > > > >> > > > delete]. >>> > > > > > > > > >> > > > > > >> > > >>> > > > > > > > > >> > > > > > >> > > >>> > > > > > > > > >> > > > > > >> > > I don't think it's a good idea to >>> keep >>> > > delete >>> > > > > in >>> > > > > > > the >>> > > > > > > > > >> final >>> > > > > > > > > >> > > > cleanup >>> > > > > > > > > >> > > > > > >> policy >>> > > > > > > > > >> > > > > > >> > > for the topic >>> `__remote_log_metadata`, as >>> > > > this >>> > > > > > > still >>> > > > > > > > > >> > requires >>> > > > > > > > > >> > > > the >>> > > > > > > > > >> > > > > > >> user to >>> > > > > > > > > >> > > > > > >> > > keep track of the max retention >>> hours of >>> > > > topics >>> > > > > > > that >>> > > > > > > > > have >>> > > > > > > > > >> > > remote >>> > > > > > > > > >> > > > > > >> storage >>> > > > > > > > > >> > > > > > >> > > enabled, and it's operational burden. >>> > It's >>> > > > also >>> > > > > > > hard >>> > > > > > > > to >>> > > > > > > > > >> > reason >>> > > > > > > > > >> > > > > about >>> > > > > > > > > >> > > > > > >> what >>> > > > > > > > > >> > > > > > >> > > will happen if the user configures >>> the >>> > > wrong >>> > > > > > > > > >> retention.ms. >>> > > > > > > > > >> > I >>> > > > > > > > > >> > > > hope >>> > > > > > > > > >> > > > > > >> this >>> > > > > > > > > >> > > > > > >> > > makes sense. >>> > > > > > > > > >> > > > > > >> > > >>> > > > > > > > > >> > > > > > >> > > >>> > > > > > > > > >> > > > > > >> > > Thanks, >>> > > > > > > > > >> > > > > > >> > > Lijun Tong >>> > > > > > > > > >> > > > > > >> > > >>> > > > > > > > > >> > > > > > >> > > Lijun Tong <[email protected]> >>> > > > > > 于2026年1月15日周四 >>> > > > > > > > > >> 11:43写道: >>> > > > > > > > > >> > > > > > >> > > >>> > > > > > > > > >> > > > > > >> > > > Hey Kamal, >>> > > > > > > > > >> > > > > > >> > > > >>> > > > > > > > > >> > > > > > >> > > > Thanks for your reply! I am glad >>> we are >>> > > on >>> > > > > the >>> > > > > > > same >>> > > > > > > > > >> page >>> > > > > > > > > >> > > with >>> > > > > > > > > >> > > > > > making >>> > > > > > > > > >> > > > > > >> > the >>> > > > > > > > > >> > > > > > >> > > > __remote_log_metadata topic >>> compacted >>> > > > > optional >>> > > > > > > for >>> > > > > > > > > the >>> > > > > > > > > >> > user >>> > > > > > > > > >> > > > > now, I >>> > > > > > > > > >> > > > > > >> will >>> > > > > > > > > >> > > > > > >> > > > update the KIP with this change. >>> > > > > > > > > >> > > > > > >> > > > >>> > > > > > > > > >> > > > > > >> > > > For the Q2: >>> > > > > > > > > >> > > > > > >> > > > With the key designed as >>> > > > > > > > > >> > > > > > >> >>> > TopicId:Partition:EndOffset:BrokerLeaderEpoch, >>> > > > > > > > > >> > > > > > >> > > > even the same broker retries the >>> upload >>> > > > > > multiple >>> > > > > > > > > times >>> > > > > > > > > >> for >>> > > > > > > > > >> > > the >>> > > > > > > > > >> > > > > > same >>> > > > > > > > > >> > > > > > >> log >>> > > > > > > > > >> > > > > > >> > > > segment, the latest retry attempt >>> with >>> > > the >>> > > > > > latest >>> > > > > > > > > >> segment >>> > > > > > > > > >> > > UUID >>> > > > > > > > > >> > > > > > will >>> > > > > > > > > >> > > > > > >> > > > overwrite the previous attempts' >>> value >>> > > > since >>> > > > > > they >>> > > > > > > > > share >>> > > > > > > > > >> > the >>> > > > > > > > > >> > > > same >>> > > > > > > > > >> > > > > > >> key, >>> > > > > > > > > >> > > > > > >> > so >>> > > > > > > > > >> > > > > > >> > > we >>> > > > > > > > > >> > > > > > >> > > > don't need to explicitly track the >>> > failed >>> > > > > > upload >>> > > > > > > > > >> metadata, >>> > > > > > > > > >> > > > > because >>> > > > > > > > > >> > > > > > >> it's >>> > > > > > > > > >> > > > > > >> > > > gone already by the later attempt. >>> > That's >>> > > > my >>> > > > > > > > > >> understanding >>> > > > > > > > > >> > > > about >>> > > > > > > > > >> > > > > > the >>> > > > > > > > > >> > > > > > >> > > > RLMCopyTask, correct me if I am >>> wrong. >>> > > > > > > > > >> > > > > > >> > > > >>> > > > > > > > > >> > > > > > >> > > > Thanks, >>> > > > > > > > > >> > > > > > >> > > > Lijun Tong >>> > > > > > > > > >> > > > > > >> > > > >>> > > > > > > > > >> > > > > > >> > > > Kamal Chandraprakash < >>> > > > > > > > [email protected] >>> > > > > > > > > > >>> > > > > > > > > >> > > > > > 于2026年1月14日周三 >>> > > > > > > > > >> > > > > > >> > > > 21:18写道: >>> > > > > > > > > >> > > > > > >> > > > >>> > > > > > > > > >> > > > > > >> > > >> Hi Lijun, >>> > > > > > > > > >> > > > > > >> > > >> >>> > > > > > > > > >> > > > > > >> > > >> Thanks for the reply! >>> > > > > > > > > >> > > > > > >> > > >> >>> > > > > > > > > >> > > > > > >> > > >> Q1: Sounds good. Could you >>> clarify it >>> > in >>> > > > the >>> > > > > > KIP >>> > > > > > > > > that >>> > > > > > > > > >> the >>> > > > > > > > > >> > > > same >>> > > > > > > > > >> > > > > > >> > > partitioner >>> > > > > > > > > >> > > > > > >> > > >> will be used? >>> > > > > > > > > >> > > > > > >> > > >> >>> > > > > > > > > >> > > > > > >> > > >> Q2: With >>> > > > > > > > > TopicId:Partition:EndOffset:BrokerLeaderEpoch >>> > > > > > > > > >> > key, >>> > > > > > > > > >> > > > if >>> > > > > > > > > >> > > > > > the >>> > > > > > > > > >> > > > > > >> > same >>> > > > > > > > > >> > > > > > >> > > >> broker retries the upload due to >>> > > > > intermittent >>> > > > > > > > > >> > > > > > >> > > >> issues in object storage (or) >>> RLMM. >>> > > Then, >>> > > > > > those >>> > > > > > > > > failed >>> > > > > > > > > >> > > upload >>> > > > > > > > > >> > > > > > >> metadata >>> > > > > > > > > >> > > > > > >> > > >> also >>> > > > > > > > > >> > > > > > >> > > >> need to be cleared. >>> > > > > > > > > >> > > > > > >> > > >> >>> > > > > > > > > >> > > > > > >> > > >> Q3: We may have to skip the null >>> value >>> > > > > records >>> > > > > > > in >>> > > > > > > > > the >>> > > > > > > > > >> > > > > > ConsumerTask. >>> > > > > > > > > >> > > > > > >> > > >> >>> > > > > > > > > >> > > > > > >> > > >> Q4a: The idea is to keep the >>> cleanup >>> > > > policy >>> > > > > as >>> > > > > > > > > >> "delete" >>> > > > > > > > > >> > and >>> > > > > > > > > >> > > > > also >>> > > > > > > > > >> > > > > > >> send >>> > > > > > > > > >> > > > > > >> > > the >>> > > > > > > > > >> > > > > > >> > > >> tombstone markers >>> > > > > > > > > >> > > > > > >> > > >> to the existing >>> > `__remote_log_metadata` >>> > > > > topic. >>> > > > > > > > And, >>> > > > > > > > > >> > handle >>> > > > > > > > > >> > > > the >>> > > > > > > > > >> > > > > > >> > tombstone >>> > > > > > > > > >> > > > > > >> > > >> records in the ConsumerTask. >>> > > > > > > > > >> > > > > > >> > > >> >>> > > > > > > > > >> > > > > > >> > > >> The user can decide when to change >>> > their >>> > > > > > > internal >>> > > > > > > > > >> topic >>> > > > > > > > > >> > > > cleanup >>> > > > > > > > > >> > > > > > >> policy >>> > > > > > > > > >> > > > > > >> > > to >>> > > > > > > > > >> > > > > > >> > > >> compact. If someone retains >>> > > > > > > > > >> > > > > > >> > > >> the data in the remote storage >>> for 3 >>> > > > months, >>> > > > > > > then >>> > > > > > > > > they >>> > > > > > > > > >> > can >>> > > > > > > > > >> > > > > > migrate >>> > > > > > > > > >> > > > > > >> to >>> > > > > > > > > >> > > > > > >> > > the >>> > > > > > > > > >> > > > > > >> > > >> compacted topic after 3 months >>> > > > > > > > > >> > > > > > >> > > >> post rolling out this change. And, >>> > > update >>> > > > > > their >>> > > > > > > > > >> cleanup >>> > > > > > > > > >> > > > policy >>> > > > > > > > > >> > > > > to >>> > > > > > > > > >> > > > > > >> > > >> [compact, >>> > > > > > > > > >> > > > > > >> > > >> delete]. >>> > > > > > > > > >> > > > > > >> > > >> >>> > > > > > > > > >> > > > > > >> > > >> Thanks, >>> > > > > > > > > >> > > > > > >> > > >> Kamal >>> > > > > > > > > >> > > > > > >> > > >> >>> > > > > > > > > >> > > > > > >> > > >> On Thu, Jan 15, 2026 at 4:12 AM >>> Lijun >>> > > > Tong < >>> > > > > > > > > >> > > > > > >> [email protected]> >>> > > > > > > > > >> > > > > > >> > > >> wrote: >>> > > > > > > > > >> > > > > > >> > > >> >>> > > > > > > > > >> > > > > > >> > > >> > Hey Jian, >>> > > > > > > > > >> > > > > > >> > > >> > >>> > > > > > > > > >> > > > > > >> > > >> > Thanks for your time to review >>> this >>> > > > KIP. I >>> > > > > > > > > >> appreciate >>> > > > > > > > > >> > > that >>> > > > > > > > > >> > > > > you >>> > > > > > > > > >> > > > > > >> > > propose a >>> > > > > > > > > >> > > > > > >> > > >> > simpler migration solution to >>> > onboard >>> > > > the >>> > > > > > new >>> > > > > > > > > >> feature. >>> > > > > > > > > >> > > > > > >> > > >> > >>> > > > > > > > > >> > > > > > >> > > >> > There are 2 points that I think >>> can >>> > be >>> > > > > > further >>> > > > > > > > > >> refined >>> > > > > > > > > >> > > on: >>> > > > > > > > > >> > > > > > >> > > >> > >>> > > > > > > > > >> > > > > > >> > > >> > 1). make the topic compacted >>> > optional, >>> > > > > > > although >>> > > > > > > > > the >>> > > > > > > > > >> new >>> > > > > > > > > >> > > > > feature >>> > > > > > > > > >> > > > > > >> will >>> > > > > > > > > >> > > > > > >> > > >> > continue to emit tombstone >>> message >>> > for >>> > > > > those >>> > > > > > > > > expired >>> > > > > > > > > >> > log >>> > > > > > > > > >> > > > > > segments >>> > > > > > > > > >> > > > > > >> > even >>> > > > > > > > > >> > > > > > >> > > >> when >>> > > > > > > > > >> > > > > > >> > > >> > the topic is still on time-based >>> > > > retention >>> > > > > > > mode, >>> > > > > > > > > so >>> > > > > > > > > >> > once >>> > > > > > > > > >> > > > user >>> > > > > > > > > >> > > > > > >> > switched >>> > > > > > > > > >> > > > > > >> > > >> to >>> > > > > > > > > >> > > > > > >> > > >> > using the compacted topic, those >>> > > expired >>> > > > > > > > messages >>> > > > > > > > > >> can >>> > > > > > > > > >> > > still >>> > > > > > > > > >> > > > > be >>> > > > > > > > > >> > > > > > >> > deleted >>> > > > > > > > > >> > > > > > >> > > >> > despite the topic is not >>> retention >>> > > based >>> > > > > > > > anymore. >>> > > > > > > > > >> > > > > > >> > > >> > 2). we need to expose some flag >>> to >>> > the >>> > > > > user >>> > > > > > to >>> > > > > > > > > >> indicate >>> > > > > > > > > >> > > > > whether >>> > > > > > > > > >> > > > > > >> the >>> > > > > > > > > >> > > > > > >> > > >> topic >>> > > > > > > > > >> > > > > > >> > > >> > can be flipped to compacted by >>> > > checking >>> > > > > > > whether >>> > > > > > > > > all >>> > > > > > > > > >> the >>> > > > > > > > > >> > > old >>> > > > > > > > > >> > > > > > >> format >>> > > > > > > > > >> > > > > > >> > > >> > keyed-less message has expired, >>> and >>> > > > allow >>> > > > > > user >>> > > > > > > > to >>> > > > > > > > > >> > choose >>> > > > > > > > > >> > > to >>> > > > > > > > > >> > > > > > flip >>> > > > > > > > > >> > > > > > >> to >>> > > > > > > > > >> > > > > > >> > > >> > compacted only when the flag is >>> > true. >>> > > > > > > > > >> > > > > > >> > > >> > >>> > > > > > > > > >> > > > > > >> > > >> > Thanks for sharing your idea. I >>> will >>> > > > > update >>> > > > > > > the >>> > > > > > > > > KIP >>> > > > > > > > > >> > later >>> > > > > > > > > >> > > > > with >>> > > > > > > > > >> > > > > > >> this >>> > > > > > > > > >> > > > > > >> > > new >>> > > > > > > > > >> > > > > > >> > > >> > idea. >>> > > > > > > > > >> > > > > > >> > > >> > >>> > > > > > > > > >> > > > > > >> > > >> > Best, >>> > > > > > > > > >> > > > > > >> > > >> > Lijun Tong >>> > > > > > > > > >> > > > > > >> > > >> > >>> > > > > > > > > >> > > > > > >> > > >> > >>> > > > > > > > > >> > > > > > >> > > >> > jian fu <[email protected]> >>> > > > > > 于2026年1月12日周一 >>> > > > > > > > > >> 04:55写道: >>> > > > > > > > > >> > > > > > >> > > >> > >>> > > > > > > > > >> > > > > > >> > > >> > > Hi Lijun Tong: >>> > > > > > > > > >> > > > > > >> > > >> > > >>> > > > > > > > > >> > > > > > >> > > >> > > Thanks for your KIP which >>> raise >>> > this >>> > > > > > > critical >>> > > > > > > > > >> issue. >>> > > > > > > > > >> > > > > > >> > > >> > > >>> > > > > > > > > >> > > > > > >> > > >> > > what about just keep one topic >>> > > instead >>> > > > > of >>> > > > > > > > > involve >>> > > > > > > > > >> > > another >>> > > > > > > > > >> > > > > > >> topic. >>> > > > > > > > > >> > > > > > >> > > >> > > for existed topic data's >>> > migration. >>> > > > > maybe >>> > > > > > we >>> > > > > > > > can >>> > > > > > > > > >> use >>> > > > > > > > > >> > > this >>> > > > > > > > > >> > > > > way >>> > > > > > > > > >> > > > > > >> to >>> > > > > > > > > >> > > > > > >> > > solve >>> > > > > > > > > >> > > > > > >> > > >> > the >>> > > > > > > > > >> > > > > > >> > > >> > > issue: >>> > > > > > > > > >> > > > > > >> > > >> > > (1) set the retention date > >>> all >>> > of >>> > > > > topic >>> > > > > > > > which >>> > > > > > > > > >> > enable >>> > > > > > > > > >> > > > > remote >>> > > > > > > > > >> > > > > > >> > > >> storage's >>> > > > > > > > > >> > > > > > >> > > >> > > retention time >>> > > > > > > > > >> > > > > > >> > > >> > > (2) deploy new kafka version >>> with >>> > > > > feature: >>> > > > > > > > > which >>> > > > > > > > > >> > send >>> > > > > > > > > >> > > > the >>> > > > > > > > > >> > > > > > >> message >>> > > > > > > > > >> > > > > > >> > > >> with >>> > > > > > > > > >> > > > > > >> > > >> > key >>> > > > > > > > > >> > > > > > >> > > >> > > (3) wait all the message >>> expired >>> > and >>> > > > new >>> > > > > > > > message >>> > > > > > > > > >> with >>> > > > > > > > > >> > > key >>> > > > > > > > > >> > > > > > >> coming >>> > > > > > > > > >> > > > > > >> > to >>> > > > > > > > > >> > > > > > >> > > >> the >>> > > > > > > > > >> > > > > > >> > > >> > > topic >>> > > > > > > > > >> > > > > > >> > > >> > > (4) convert the topic to >>> compact >>> > > > > > > > > >> > > > > > >> > > >> > > >>> > > > > > > > > >> > > > > > >> > > >> > > I don't test it. Just propose >>> this >>> > > > > > solution >>> > > > > > > > > >> according >>> > > > > > > > > >> > > to >>> > > > > > > > > >> > > > > code >>> > > > > > > > > >> > > > > > >> > review >>> > > > > > > > > >> > > > > > >> > > >> > > result. just for your >>> reference. >>> > > > > > > > > >> > > > > > >> > > >> > > The steps maybe a little >>> complex. >>> > > but >>> > > > it >>> > > > > > can >>> > > > > > > > > >> avoiding >>> > > > > > > > > >> > > add >>> > > > > > > > > >> > > > > new >>> > > > > > > > > >> > > > > > >> > topic. >>> > > > > > > > > >> > > > > > >> > > >> > > >>> > > > > > > > > >> > > > > > >> > > >> > > Regards >>> > > > > > > > > >> > > > > > >> > > >> > > Jian >>> > > > > > > > > >> > > > > > >> > > >> > > >>> > > > > > > > > >> > > > > > >> > > >> > > Lijun Tong < >>> > [email protected] >>> > > > >>> > > > > > > > > 于2026年1月8日周四 >>> > > > > > > > > >> > > > 09:17写道: >>> > > > > > > > > >> > > > > > >> > > >> > > >>> > > > > > > > > >> > > > > > >> > > >> > > > Hey Kamal, >>> > > > > > > > > >> > > > > > >> > > >> > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > Thanks for your time for the >>> > > review. >>> > > > > > > > > >> > > > > > >> > > >> > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > Here is my response to your >>> > > > questions: >>> > > > > > > > > >> > > > > > >> > > >> > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > Q1 At this point, I don’t >>> see a >>> > > need >>> > > > > to >>> > > > > > > > change >>> > > > > > > > > >> > > > > > >> > > >> > > > >>> > RemoteLogMetadataTopicPartitioner >>> > > > for >>> > > > > > this >>> > > > > > > > > >> design. >>> > > > > > > > > >> > > > > Nothing >>> > > > > > > > > >> > > > > > in >>> > > > > > > > > >> > > > > > >> > the >>> > > > > > > > > >> > > > > > >> > > >> > current >>> > > > > > > > > >> > > > > > >> > > >> > > > approach appears to require >>> a >>> > > > > > partitioner >>> > > > > > > > > >> change, >>> > > > > > > > > >> > but >>> > > > > > > > > >> > > > I’m >>> > > > > > > > > >> > > > > > >> open >>> > > > > > > > > >> > > > > > >> > to >>> > > > > > > > > >> > > > > > >> > > >> > > > revisiting if a concrete >>> need >>> > > > arises. >>> > > > > > > > > >> > > > > > >> > > >> > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > Q2 I have some reservations >>> > about >>> > > > > using >>> > > > > > > > > >> > > SegmentId:State >>> > > > > > > > > >> > > > > as >>> > > > > > > > > >> > > > > > >> the >>> > > > > > > > > >> > > > > > >> > > key. >>> > > > > > > > > >> > > > > > >> > > >> A >>> > > > > > > > > >> > > > > > >> > > >> > > > practical challenge we see >>> today >>> > > is >>> > > > > that >>> > > > > > > the >>> > > > > > > > > >> same >>> > > > > > > > > >> > > > logical >>> > > > > > > > > >> > > > > > >> > segment >>> > > > > > > > > >> > > > > > >> > > >> can >>> > > > > > > > > >> > > > > > >> > > >> > be >>> > > > > > > > > >> > > > > > >> > > >> > > > retried multiple times with >>> > > > different >>> > > > > > > > > SegmentIds >>> > > > > > > > > >> > > across >>> > > > > > > > > >> > > > > > >> brokers. >>> > > > > > > > > >> > > > > > >> > > If >>> > > > > > > > > >> > > > > > >> > > >> the >>> > > > > > > > > >> > > > > > >> > > >> > > key >>> > > > > > > > > >> > > > > > >> > > >> > > > is SegmentId-based, it >>> becomes >>> > > > harder >>> > > > > to >>> > > > > > > > > >> discover >>> > > > > > > > > >> > and >>> > > > > > > > > >> > > > > > >> tombstone >>> > > > > > > > > >> > > > > > >> > > all >>> > > > > > > > > >> > > > > > >> > > >> > > related >>> > > > > > > > > >> > > > > > >> > > >> > > > attempts when the segment >>> > > eventually >>> > > > > > > > expires. >>> > > > > > > > > >> The >>> > > > > > > > > >> > > > > > >> > > >> > > > >>> > > > > > > > TopicId:Partition:EndOffset:BrokerLeaderEpoch >>> > > > > > > > > >> key >>> > > > > > > > > >> > is >>> > > > > > > > > >> > > > > > >> > deterministic >>> > > > > > > > > >> > > > > > >> > > >> for >>> > > > > > > > > >> > > > > > >> > > >> > a >>> > > > > > > > > >> > > > > > >> > > >> > > > logical segment attempt and >>> > helps >>> > > > > group >>> > > > > > > > > retries >>> > > > > > > > > >> by >>> > > > > > > > > >> > > > epoch, >>> > > > > > > > > >> > > > > > >> which >>> > > > > > > > > >> > > > > > >> > > >> > > simplifies >>> > > > > > > > > >> > > > > > >> > > >> > > > cleanup and reasoning about >>> > state. >>> > > > I’d >>> > > > > > > love >>> > > > > > > > to >>> > > > > > > > > >> > > > understand >>> > > > > > > > > >> > > > > > the >>> > > > > > > > > >> > > > > > >> > > >> benefits >>> > > > > > > > > >> > > > > > >> > > >> > > > you’re seeing with >>> > SegmentId:State >>> > > > > > > compared >>> > > > > > > > to >>> > > > > > > > > >> the >>> > > > > > > > > >> > > > > > >> > > >> offset/epoch-based >>> > > > > > > > > >> > > > > > >> > > >> > key >>> > > > > > > > > >> > > > > > >> > > >> > > > so we can weigh the >>> trade-offs. >>> > > > > > > > > >> > > > > > >> > > >> > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > On partitioning: with this >>> > > proposal, >>> > > > > all >>> > > > > > > > > states >>> > > > > > > > > >> > for a >>> > > > > > > > > >> > > > > given >>> > > > > > > > > >> > > > > > >> user >>> > > > > > > > > >> > > > > > >> > > >> > > > topic-partition still map >>> to the >>> > > > same >>> > > > > > > > metadata >>> > > > > > > > > >> > > > partition. >>> > > > > > > > > >> > > > > > >> That >>> > > > > > > > > >> > > > > > >> > > >> remains >>> > > > > > > > > >> > > > > > >> > > >> > > true >>> > > > > > > > > >> > > > > > >> > > >> > > > for the existing >>> > > > __remote_log_metadata >>> > > > > > > > > >> (unchanged >>> > > > > > > > > >> > > > > > >> partitioner) >>> > > > > > > > > >> > > > > > >> > and >>> > > > > > > > > >> > > > > > >> > > >> for >>> > > > > > > > > >> > > > > > >> > > >> > > the >>> > > > > > > > > >> > > > > > >> > > >> > > > new >>> > > __remote_log_metadata_compacted, >>> > > > > > > > > preserving >>> > > > > > > > > >> the >>> > > > > > > > > >> > > > > > >> properties >>> > > > > > > > > >> > > > > > >> > > >> > > > RemoteMetadataCache relies >>> on. >>> > > > > > > > > >> > > > > > >> > > >> > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > Q3 It should be fine for >>> > > > ConsumerTask >>> > > > > to >>> > > > > > > > > ignore >>> > > > > > > > > >> > > > tombstone >>> > > > > > > > > >> > > > > > >> > records >>> > > > > > > > > >> > > > > > >> > > >> (null >>> > > > > > > > > >> > > > > > >> > > >> > > > values) and no-op. >>> > > > > > > > > >> > > > > > >> > > >> > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > Q4 Although TBRLMM is a >>> sample >>> > > RLMM >>> > > > > > > > > >> implementation, >>> > > > > > > > > >> > > > it’s >>> > > > > > > > > >> > > > > > >> > currently >>> > > > > > > > > >> > > > > > >> > > >> the >>> > > > > > > > > >> > > > > > >> > > >> > > only >>> > > > > > > > > >> > > > > > >> > > >> > > > OSS option and is widely >>> used. >>> > The >>> > > > new >>> > > > > > > > > >> > > > > > >> > > >> __remote_log_metadata_compacted >>> > > > > > > > > >> > > > > > >> > > >> > > > topic offers clear >>> operational >>> > > > > benefits >>> > > > > > in >>> > > > > > > > > that >>> > > > > > > > > >> > > > context. >>> > > > > > > > > >> > > > > We >>> > > > > > > > > >> > > > > > >> can >>> > > > > > > > > >> > > > > > >> > > also >>> > > > > > > > > >> > > > > > >> > > >> > > > provide a configuration to >>> let >>> > > users >>> > > > > > > choose >>> > > > > > > > > >> whether >>> > > > > > > > > >> > > > they >>> > > > > > > > > >> > > > > > >> want to >>> > > > > > > > > >> > > > > > >> > > >> keep >>> > > > > > > > > >> > > > > > >> > > >> > the >>> > > > > > > > > >> > > > > > >> > > >> > > > audit topic >>> > > (__remote_log_metadata) >>> > > > in >>> > > > > > > their >>> > > > > > > > > >> > cluster. >>> > > > > > > > > >> > > > > > >> > > >> > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > Q4a Enabling compaction on >>> > > > > > > > > __remote_log_metadata >>> > > > > > > > > >> > > alone >>> > > > > > > > > >> > > > > may >>> > > > > > > > > >> > > > > > >> not >>> > > > > > > > > >> > > > > > >> > > fully >>> > > > > > > > > >> > > > > > >> > > >> > > > address the unbounded >>> growth, >>> > > since >>> > > > we >>> > > > > > > also >>> > > > > > > > > >> need to >>> > > > > > > > > >> > > > emit >>> > > > > > > > > >> > > > > > >> > > tombstones >>> > > > > > > > > >> > > > > > >> > > >> for >>> > > > > > > > > >> > > > > > >> > > >> > > > expired keys to delete them. >>> > > > Deferring >>> > > > > > > > > >> compaction >>> > > > > > > > > >> > and >>> > > > > > > > > >> > > > > > >> > tombstoning >>> > > > > > > > > >> > > > > > >> > > to >>> > > > > > > > > >> > > > > > >> > > >> > user >>> > > > > > > > > >> > > > > > >> > > >> > > > configuration could make the >>> > code >>> > > > flow >>> > > > > > > > > >> complicated, >>> > > > > > > > > >> > > > also >>> > > > > > > > > >> > > > > > add >>> > > > > > > > > >> > > > > > >> > > >> > operational >>> > > > > > > > > >> > > > > > >> > > >> > > > complexity and make outcomes >>> > less >>> > > > > > > > predictable. >>> > > > > > > > > >> The >>> > > > > > > > > >> > > > > proposal >>> > > > > > > > > >> > > > > > >> aims >>> > > > > > > > > >> > > > > > >> > > to >>> > > > > > > > > >> > > > > > >> > > >> > > provide >>> > > > > > > > > >> > > > > > >> > > >> > > > a consistent experience by >>> > > defining >>> > > > > > > > > >> deterministic >>> > > > > > > > > >> > > keys >>> > > > > > > > > >> > > > > and >>> > > > > > > > > >> > > > > > >> > > emitting >>> > > > > > > > > >> > > > > > >> > > >> > > > tombstones as part of the >>> > broker’s >>> > > > > > > > > >> > responsibilities, >>> > > > > > > > > >> > > > > while >>> > > > > > > > > >> > > > > > >> still >>> > > > > > > > > >> > > > > > >> > > >> > allowing >>> > > > > > > > > >> > > > > > >> > > >> > > > users to opt out of the >>> audit >>> > > topic >>> > > > if >>> > > > > > > they >>> > > > > > > > > >> prefer. >>> > > > > > > > > >> > > > But I >>> > > > > > > > > >> > > > > > am >>> > > > > > > > > >> > > > > > >> > open >>> > > > > > > > > >> > > > > > >> > > to >>> > > > > > > > > >> > > > > > >> > > >> > more >>> > > > > > > > > >> > > > > > >> > > >> > > > discussion if there is any >>> > > concrete >>> > > > > > need I >>> > > > > > > > > don't >>> > > > > > > > > >> > > > foresee. >>> > > > > > > > > >> > > > > > >> > > >> > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > Thanks, >>> > > > > > > > > >> > > > > > >> > > >> > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > Lijun Tong >>> > > > > > > > > >> > > > > > >> > > >> > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > Kamal Chandraprakash < >>> > > > > > > > > >> > [email protected] >>> > > > > > > > > >> > > > >>> > > > > > > > > >> > > > > > >> > > 于2026年1月6日周二 >>> > > > > > > > > >> > > > > > >> > > >> > > > 01:01写道: >>> > > > > > > > > >> > > > > > >> > > >> > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > > Hi Lijun, >>> > > > > > > > > >> > > > > > >> > > >> > > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > > Thanks for the KIP! Went >>> over >>> > > the >>> > > > > > first >>> > > > > > > > > pass. >>> > > > > > > > > >> > > > > > >> > > >> > > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > > Few Questions: >>> > > > > > > > > >> > > > > > >> > > >> > > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > > 1. Are we going to >>> maintain >>> > the >>> > > > same >>> > > > > > > > > >> > > > > > >> > > >> > >>> RemoteLogMetadataTopicPartitioner >>> > > > > > > > > >> > > > > > >> > > >> > > > > < >>> > > > > > > > > >> > > > > > >> > > >> > > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > >>> > > > > > > > > >> > > > > > >> > > >> > > >>> > > > > > > > > >> > > > > > >> > > >> > >>> > > > > > > > > >> > > > > > >> > > >> >>> > > > > > > > > >> > > > > > >> > > >>> > > > > > > > > >> > > > > > >> > >>> > > > > > > > > >> > > > > > >> >>> > > > > > > > > >> > > > > > >>> > > > > > > > > >> > > > > >>> > > > > > > > > >> > > > >>> > > > > > > > > >> > > >>> > > > > > > > > >> > >>> > > > > > > > > >> >>> > > > > > > > > >>> > > > > > > > >>> > > > > > > >>> > > > > > >>> > > > > >>> > > > >>> > > >>> > >>> https://sourcegraph.com/github.com/apache/kafka/-/blob/storage/src/main/java/org/apache/kafka/server/log/remote/metadata/storage/RemoteLogMetadataTopicPartitioner.java >>> > > > > > > > > >> > > > > > >> > > >> > > > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > > for both the topics? It >>> is not >>> > > > clear >>> > > > > > in >>> > > > > > > > the >>> > > > > > > > > >> KIP, >>> > > > > > > > > >> > > > could >>> > > > > > > > > >> > > > > > you >>> > > > > > > > > >> > > > > > >> > > clarify >>> > > > > > > > > >> > > > > > >> > > >> > it? >>> > > > > > > > > >> > > > > > >> > > >> > > > > 2. Can the key be changed >>> to >>> > > > > > > > SegmentId:State >>> > > > > > > > > >> > > instead >>> > > > > > > > > >> > > > of >>> > > > > > > > > >> > > > > > >> > > >> > > > > >>> > > > > > > > > TopicId:Partition:EndOffset:BrokerLeaderEpoch >>> > > > > > > > > >> if >>> > > > > > > > > >> > > the >>> > > > > > > > > >> > > > > same >>> > > > > > > > > >> > > > > > >> > > >> partitioner >>> > > > > > > > > >> > > > > > >> > > >> > > is >>> > > > > > > > > >> > > > > > >> > > >> > > > > used? It is good to >>> maintain >>> > all >>> > > > the >>> > > > > > > > segment >>> > > > > > > > > >> > states >>> > > > > > > > > >> > > > > for a >>> > > > > > > > > >> > > > > > >> > > >> > > > > user-topic-partition in >>> the >>> > same >>> > > > > > > metadata >>> > > > > > > > > >> > > partition. >>> > > > > > > > > >> > > > > > >> > > >> > > > > 3. Should we have to >>> handle >>> > the >>> > > > > > records >>> > > > > > > > with >>> > > > > > > > > >> null >>> > > > > > > > > >> > > > value >>> > > > > > > > > >> > > > > > >> > > >> (tombstone) >>> > > > > > > > > >> > > > > > >> > > >> > in >>> > > > > > > > > >> > > > > > >> > > >> > > > the >>> > > > > > > > > >> > > > > > >> > > >> > > > > ConsumerTask >>> > > > > > > > > >> > > > > > >> > > >> > > > > < >>> > > > > > > > > >> > > > > > >> > > >> > > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > >>> > > > > > > > > >> > > > > > >> > > >> > > >>> > > > > > > > > >> > > > > > >> > > >> > >>> > > > > > > > > >> > > > > > >> > > >> >>> > > > > > > > > >> > > > > > >> > > >>> > > > > > > > > >> > > > > > >> > >>> > > > > > > > > >> > > > > > >> >>> > > > > > > > > >> > > > > > >>> > > > > > > > > >> > > > > >>> > > > > > > > > >> > > > >>> > > > > > > > > >> > > >>> > > > > > > > > >> > >>> > > > > > > > > >> >>> > > > > > > > > >>> > > > > > > > >>> > > > > > > >>> > > > > > >>> > > > > >>> > > > >>> > > >>> > >>> https://sourcegraph.com/github.com/apache/kafka/-/blob/storage/src/main/java/org/apache/kafka/server/log/remote/metadata/storage/ConsumerTask.java?L166 >>> > > > > > > > > >> > > > > > >> > > >> > > > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > > ? >>> > > > > > > > > >> > > > > > >> > > >> > > > > 4. TBRLMM >>> > > > > > > > > >> > > > > > >> > > >> > > > > < >>> > > > > > > > > >> > > > > > >> > > >> > > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > >>> > > > > > > > > >> > > > > > >> > > >> > > >>> > > > > > > > > >> > > > > > >> > > >> > >>> > > > > > > > > >> > > > > > >> > > >> >>> > > > > > > > > >> > > > > > >> > > >>> > > > > > > > > >> > > > > > >> > >>> > > > > > > > > >> > > > > > >> >>> > > > > > > > > >> > > > > > >>> > > > > > > > > >> > > > > >>> > > > > > > > > >> > > > >>> > > > > > > > > >> > > >>> > > > > > > > > >> > >>> > > > > > > > > >> >>> > > > > > > > > >>> > > > > > > > >>> > > > > > > >>> > > > > > >>> > > > > >>> > > > >>> > > >>> > >>> https://sourcegraph.com/github.com/apache/kafka/-/blob/storage/src/main/java/org/apache/kafka/server/log/remote/metadata/storage/TopicBasedRemoteLogMetadataManager.java >>> > > > > > > > > >> > > > > > >> > > >> > > > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > > is a sample plugin >>> > > implementation >>> > > > of >>> > > > > > > RLMM. >>> > > > > > > > > Not >>> > > > > > > > > >> > sure >>> > > > > > > > > >> > > > > > whether >>> > > > > > > > > >> > > > > > >> > the >>> > > > > > > > > >> > > > > > >> > > >> > > community >>> > > > > > > > > >> > > > > > >> > > >> > > > > will agree to add one more >>> > > > internal >>> > > > > > > topic >>> > > > > > > > > for >>> > > > > > > > > >> > this >>> > > > > > > > > >> > > > > plugin >>> > > > > > > > > >> > > > > > >> > impl. >>> > > > > > > > > >> > > > > > >> > > >> > > > > 4a. Can we modify the new >>> > > messages >>> > > > > to >>> > > > > > > the >>> > > > > > > > > >> > > > > > >> > __remote_log_metadata >>> > > > > > > > > >> > > > > > >> > > >> topic >>> > > > > > > > > >> > > > > > >> > > >> > > to >>> > > > > > > > > >> > > > > > >> > > >> > > > > contain the key and leave >>> it >>> > to >>> > > > the >>> > > > > > user >>> > > > > > > > to >>> > > > > > > > > >> > enable >>> > > > > > > > > >> > > > > > >> compaction >>> > > > > > > > > >> > > > > > >> > > for >>> > > > > > > > > >> > > > > > >> > > >> > this >>> > > > > > > > > >> > > > > > >> > > >> > > > > topic if they need? >>> > > > > > > > > >> > > > > > >> > > >> > > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > > Thanks, >>> > > > > > > > > >> > > > > > >> > > >> > > > > Kamal >>> > > > > > > > > >> > > > > > >> > > >> > > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > > On Tue, Jan 6, 2026 at >>> 7:35 AM >>> > > > Lijun >>> > > > > > > Tong >>> > > > > > > > < >>> > > > > > > > > >> > > > > > >> > > >> [email protected]> >>> > > > > > > > > >> > > > > > >> > > >> > > > wrote: >>> > > > > > > > > >> > > > > > >> > > >> > > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > > > Hey Henry, >>> > > > > > > > > >> > > > > > >> > > >> > > > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > > > Thank you for your time >>> and >>> > > > > > response! >>> > > > > > > I >>> > > > > > > > > >> really >>> > > > > > > > > >> > > like >>> > > > > > > > > >> > > > > > your >>> > > > > > > > > >> > > > > > >> > > >> KIP-1248 >>> > > > > > > > > >> > > > > > >> > > >> > > about >>> > > > > > > > > >> > > > > > >> > > >> > > > > > offloading the >>> consumption >>> > of >>> > > > > remote >>> > > > > > > log >>> > > > > > > > > >> away >>> > > > > > > > > >> > > from >>> > > > > > > > > >> > > > > the >>> > > > > > > > > >> > > > > > >> > broker, >>> > > > > > > > > >> > > > > > >> > > >> and >>> > > > > > > > > >> > > > > > >> > > >> > I >>> > > > > > > > > >> > > > > > >> > > >> > > > > think >>> > > > > > > > > >> > > > > > >> > > >> > > > > > with that change, the >>> topic >>> > > that >>> > > > > > > enables >>> > > > > > > > > the >>> > > > > > > > > >> > > tiered >>> > > > > > > > > >> > > > > > >> storage >>> > > > > > > > > >> > > > > > >> > > can >>> > > > > > > > > >> > > > > > >> > > >> > also >>> > > > > > > > > >> > > > > > >> > > >> > > > have >>> > > > > > > > > >> > > > > > >> > > >> > > > > > longer retention >>> > > configurations >>> > > > > and >>> > > > > > > > would >>> > > > > > > > > >> > benefit >>> > > > > > > > > >> > > > > from >>> > > > > > > > > >> > > > > > >> this >>> > > > > > > > > >> > > > > > >> > > KIP >>> > > > > > > > > >> > > > > > >> > > >> > too. >>> > > > > > > > > >> > > > > > >> > > >> > > > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > > > Some suggestions: In >>> your >>> > > > example >>> > > > > > > > > >> scenarios, it >>> > > > > > > > > >> > > > would >>> > > > > > > > > >> > > > > > >> also >>> > > > > > > > > >> > > > > > >> > be >>> > > > > > > > > >> > > > > > >> > > >> good >>> > > > > > > > > >> > > > > > >> > > >> > to >>> > > > > > > > > >> > > > > > >> > > >> > > > add >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > an example of remote >>> log >>> > > > segment >>> > > > > > > > > deletion >>> > > > > > > > > >> > > > triggered >>> > > > > > > > > >> > > > > > by >>> > > > > > > > > >> > > > > > >> > > >> retention >>> > > > > > > > > >> > > > > > >> > > >> > > > policy >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > which will trigger >>> > > generation >>> > > > of >>> > > > > > > > > tombstone >>> > > > > > > > > >> > > event >>> > > > > > > > > >> > > > > into >>> > > > > > > > > >> > > > > > >> > > metadata >>> > > > > > > > > >> > > > > > >> > > >> > > topic >>> > > > > > > > > >> > > > > > >> > > >> > > > > and >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > trigger log >>> > > > compaction/deletion >>> > > > > 24 >>> > > > > > > > hour >>> > > > > > > > > >> > later, >>> > > > > > > > > >> > > I >>> > > > > > > > > >> > > > > > think >>> > > > > > > > > >> > > > > > >> > this >>> > > > > > > > > >> > > > > > >> > > is >>> > > > > > > > > >> > > > > > >> > > >> > the >>> > > > > > > > > >> > > > > > >> > > >> > > > key >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > event to cap the >>> metadata >>> > > > topic >>> > > > > > > size. >>> > > > > > > > > >> > > > > > >> > > >> > > > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > > > Regarding to this >>> > suggestion, >>> > > I >>> > > > am >>> > > > > > not >>> > > > > > > > > sure >>> > > > > > > > > >> > > whether >>> > > > > > > > > >> > > > > > >> > Scenario 4 >>> > > > > > > > > >> > > > > > >> > > >> > > > > > < >>> > > > > > > > > >> > > > > > >> > > >> > > > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > >>> > > > > > > > > >> > > > > > >> > > >> > > >>> > > > > > > > > >> > > > > > >> > > >> > >>> > > > > > > > > >> > > > > > >> > > >> >>> > > > > > > > > >> > > > > > >> > > >>> > > > > > > > > >> > > > > > >> > >>> > > > > > > > > >> > > > > > >> >>> > > > > > > > > >> > > > > > >>> > > > > > > > > >> > > > > >>> > > > > > > > > >> > > > >>> > > > > > > > > >> > > >>> > > > > > > > > >> > >>> > > > > > > > > >> >>> > > > > > > > > >>> > > > > > > > >>> > > > > > > >>> > > > > > >>> > > > > >>> > > > >>> > > >>> > >>> https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=406618613#KIP1266:BoundingTheNumberOfRemoteLogMetadataMessagesviaCompactedTopic-Scenario4:SegmentDeletion >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > > > has >>> > > > > > > > > >> > > > > > >> > > >> > > > > > covered it. I can add >>> more >>> > > rows >>> > > > in >>> > > > > > the >>> > > > > > > > > >> Timeline >>> > > > > > > > > >> > > > Table >>> > > > > > > > > >> > > > > > >> like >>> > > > > > > > > >> > > > > > >> > > >> > T5+24hour >>> > > > > > > > > >> > > > > > >> > > >> > > to >>> > > > > > > > > >> > > > > > >> > > >> > > > > > indicate the messages >>> are >>> > gone >>> > > > by >>> > > > > > then >>> > > > > > > > to >>> > > > > > > > > >> > > > explicitly >>> > > > > > > > > >> > > > > > show >>> > > > > > > > > >> > > > > > >> > that >>> > > > > > > > > >> > > > > > >> > > >> > > messages >>> > > > > > > > > >> > > > > > >> > > >> > > > > are >>> > > > > > > > > >> > > > > > >> > > >> > > > > > deleted, thus the >>> number of >>> > > > > messages >>> > > > > > > are >>> > > > > > > > > >> capped >>> > > > > > > > > >> > > in >>> > > > > > > > > >> > > > > the >>> > > > > > > > > >> > > > > > >> > topic. >>> > > > > > > > > >> > > > > > >> > > >> > > > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > > > Regarding whether the >>> topic >>> > > > > > > > > >> > __remote_log_metadata >>> > > > > > > > > >> > > > is >>> > > > > > > > > >> > > > > > >> still >>> > > > > > > > > >> > > > > > >> > > >> > > necessary, I >>> > > > > > > > > >> > > > > > >> > > >> > > > > am >>> > > > > > > > > >> > > > > > >> > > >> > > > > > inclined to continue to >>> have >>> > > > this >>> > > > > > > topic >>> > > > > > > > at >>> > > > > > > > > >> > least >>> > > > > > > > > >> > > > for >>> > > > > > > > > >> > > > > > >> > debugging >>> > > > > > > > > >> > > > > > >> > > >> > > purposes >>> > > > > > > > > >> > > > > > >> > > >> > > > > so >>> > > > > > > > > >> > > > > > >> > > >> > > > > > we can build confidence >>> > about >>> > > > the >>> > > > > > > > > compacted >>> > > > > > > > > >> > topic >>> > > > > > > > > >> > > > > > >> change, we >>> > > > > > > > > >> > > > > > >> > > can >>> > > > > > > > > >> > > > > > >> > > >> > > > > > always choose to remove >>> this >>> > > > topic >>> > > > > > in >>> > > > > > > > the >>> > > > > > > > > >> > future >>> > > > > > > > > >> > > > once >>> > > > > > > > > >> > > > > > we >>> > > > > > > > > >> > > > > > >> all >>> > > > > > > > > >> > > > > > >> > > >> agree >>> > > > > > > > > >> > > > > > >> > > >> > it >>> > > > > > > > > >> > > > > > >> > > >> > > > > > provides limited value >>> for >>> > the >>> > > > > > users. >>> > > > > > > > > >> > > > > > >> > > >> > > > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > > > Thanks, >>> > > > > > > > > >> > > > > > >> > > >> > > > > > Lijun Tong >>> > > > > > > > > >> > > > > > >> > > >> > > > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > > > Henry Haiying Cai via >>> dev < >>> > > > > > > > > >> > [email protected]> >>> > > > > > > > > >> > > > > > >> > 于2026年1月5日周一 >>> > > > > > > > > >> > > > > > >> > > >> > > 16:19写道: >>> > > > > > > > > >> > > > > > >> > > >> > > > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > Lijun, >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > Thanks for the >>> proposal >>> > and >>> > > I >>> > > > > > liked >>> > > > > > > > your >>> > > > > > > > > >> idea >>> > > > > > > > > >> > > of >>> > > > > > > > > >> > > > > > using >>> > > > > > > > > >> > > > > > >> a >>> > > > > > > > > >> > > > > > >> > > >> > compacted >>> > > > > > > > > >> > > > > > >> > > >> > > > > topic >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > for tiered storage >>> > metadata >>> > > > > topic. >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > In our setup, we have >>> set >>> > a >>> > > > > > shorter >>> > > > > > > > > >> retention >>> > > > > > > > > >> > > (3 >>> > > > > > > > > >> > > > > > days) >>> > > > > > > > > >> > > > > > >> for >>> > > > > > > > > >> > > > > > >> > > the >>> > > > > > > > > >> > > > > > >> > > >> > > tiered >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > storage metadata >>> topic to >>> > > > > control >>> > > > > > > the >>> > > > > > > > > size >>> > > > > > > > > >> > > > growth. >>> > > > > > > > > >> > > > > > We >>> > > > > > > > > >> > > > > > >> can >>> > > > > > > > > >> > > > > > >> > > do >>> > > > > > > > > >> > > > > > >> > > >> > that >>> > > > > > > > > >> > > > > > >> > > >> > > > > since >>> > > > > > > > > >> > > > > > >> > > >> > > > > > we >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > control all topic's >>> > > retention >>> > > > > > policy >>> > > > > > > > in >>> > > > > > > > > >> our >>> > > > > > > > > >> > > > > clusters >>> > > > > > > > > >> > > > > > >> and >>> > > > > > > > > >> > > > > > >> > we >>> > > > > > > > > >> > > > > > >> > > >> set a >>> > > > > > > > > >> > > > > > >> > > >> > > > > uniform >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > retention.policy for >>> all >>> > our >>> > > > > > tiered >>> > > > > > > > > >> storage >>> > > > > > > > > >> > > > topics. >>> > > > > > > > > >> > > > > > I >>> > > > > > > > > >> > > > > > >> can >>> > > > > > > > > >> > > > > > >> > > see >>> > > > > > > > > >> > > > > > >> > > >> > > other >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > users/companies will >>> not >>> > be >>> > > > able >>> > > > > > to >>> > > > > > > > > >> enforce >>> > > > > > > > > >> > > that >>> > > > > > > > > >> > > > > > >> retention >>> > > > > > > > > >> > > > > > >> > > >> policy >>> > > > > > > > > >> > > > > > >> > > >> > > to >>> > > > > > > > > >> > > > > > >> > > >> > > > > all >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > tiered storage topics. >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > Some suggestions: In >>> your >>> > > > > example >>> > > > > > > > > >> scenarios, >>> > > > > > > > > >> > it >>> > > > > > > > > >> > > > > would >>> > > > > > > > > >> > > > > > >> also >>> > > > > > > > > >> > > > > > >> > > be >>> > > > > > > > > >> > > > > > >> > > >> > good >>> > > > > > > > > >> > > > > > >> > > >> > > to >>> > > > > > > > > >> > > > > > >> > > >> > > > > add >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > an example of remote >>> log >>> > > > segment >>> > > > > > > > > deletion >>> > > > > > > > > >> > > > triggered >>> > > > > > > > > >> > > > > > by >>> > > > > > > > > >> > > > > > >> > > >> retention >>> > > > > > > > > >> > > > > > >> > > >> > > > policy >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > which will trigger >>> > > generation >>> > > > of >>> > > > > > > > > tombstone >>> > > > > > > > > >> > > event >>> > > > > > > > > >> > > > > into >>> > > > > > > > > >> > > > > > >> > > metadata >>> > > > > > > > > >> > > > > > >> > > >> > > topic >>> > > > > > > > > >> > > > > > >> > > >> > > > > and >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > trigger log >>> > > > compaction/deletion >>> > > > > 24 >>> > > > > > > > hour >>> > > > > > > > > >> > later, >>> > > > > > > > > >> > > I >>> > > > > > > > > >> > > > > > think >>> > > > > > > > > >> > > > > > >> > this >>> > > > > > > > > >> > > > > > >> > > is >>> > > > > > > > > >> > > > > > >> > > >> > the >>> > > > > > > > > >> > > > > > >> > > >> > > > key >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > event to cap the >>> metadata >>> > > > topic >>> > > > > > > size. >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > For the original >>> unbounded >>> > > > > > > > > >> > remote_log_metadata >>> > > > > > > > > >> > > > > topic, >>> > > > > > > > > >> > > > > > >> I am >>> > > > > > > > > >> > > > > > >> > > not >>> > > > > > > > > >> > > > > > >> > > >> > sure >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > whether we still need >>> it >>> > or >>> > > > not. >>> > > > > > If >>> > > > > > > > it >>> > > > > > > > > is >>> > > > > > > > > >> > left >>> > > > > > > > > >> > > > > only >>> > > > > > > > > >> > > > > > >> for >>> > > > > > > > > >> > > > > > >> > > audit >>> > > > > > > > > >> > > > > > >> > > >> > > trail >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > purpose, people can >>> set >>> > up a >>> > > > > data >>> > > > > > > > > >> ingestion >>> > > > > > > > > >> > > > > pipeline >>> > > > > > > > > >> > > > > > to >>> > > > > > > > > >> > > > > > >> > > ingest >>> > > > > > > > > >> > > > > > >> > > >> > the >>> > > > > > > > > >> > > > > > >> > > >> > > > > > content >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > of metadata topic >>> into a >>> > > > > separate >>> > > > > > > > > storage >>> > > > > > > > > >> > > > location. >>> > > > > > > > > >> > > > > > I >>> > > > > > > > > >> > > > > > >> > think >>> > > > > > > > > >> > > > > > >> > > >> we >>> > > > > > > > > >> > > > > > >> > > >> > can >>> > > > > > > > > >> > > > > > >> > > >> > > > > have >>> > > > > > > > > >> > > > > > >> > > >> > > > > > a >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > flag to have only one >>> > > metadata >>> > > > > > topic >>> > > > > > > > > (the >>> > > > > > > > > >> > > > compacted >>> > > > > > > > > >> > > > > > >> > > version). >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > On Monday, January 5, >>> 2026 >>> > > at >>> > > > > > > 01:22:42 >>> > > > > > > > > PM >>> > > > > > > > > >> > PST, >>> > > > > > > > > >> > > > > Lijun >>> > > > > > > > > >> > > > > > >> Tong >>> > > > > > > > > >> > > > > > >> > < >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > >>> [email protected]> >>> > > > wrote: >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > Hello Kafka Community, >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > I would like to start >>> a >>> > > > > discussion >>> > > > > > > on >>> > > > > > > > > >> > KIP-1266, >>> > > > > > > > > >> > > > > which >>> > > > > > > > > >> > > > > > >> > > >> proposes to >>> > > > > > > > > >> > > > > > >> > > >> > > add >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > another new compacted >>> > remote >>> > > > log >>> > > > > > > > > metadata >>> > > > > > > > > >> > topic >>> > > > > > > > > >> > > > for >>> > > > > > > > > >> > > > > > the >>> > > > > > > > > >> > > > > > >> > > tiered >>> > > > > > > > > >> > > > > > >> > > >> > > > storage, >>> > > > > > > > > >> > > > > > >> > > >> > > > > > to >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > limit the number of >>> > messages >>> > > > > that >>> > > > > > > need >>> > > > > > > > > to >>> > > > > > > > > >> be >>> > > > > > > > > >> > > > > iterated >>> > > > > > > > > >> > > > > > >> to >>> > > > > > > > > >> > > > > > >> > > build >>> > > > > > > > > >> > > > > > >> > > >> > the >>> > > > > > > > > >> > > > > > >> > > >> > > > > remote >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > metadata state. >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > KIP link: KIP-1266 >>> > Bounding >>> > > > The >>> > > > > > > Number >>> > > > > > > > > Of >>> > > > > > > > > >> > > > > > >> > RemoteLogMetadata >>> > > > > > > > > >> > > > > > >> > > >> > > Messages >>> > > > > > > > > >> > > > > > >> > > >> > > > > via >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > Compacted >>> > RemoteLogMetadata >>> > > > > Topic >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > < >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > >>> > > > > > > > > >> > > > > > >> > > >> > > >>> > > > > > > > > >> > > > > > >> > > >> > >>> > > > > > > > > >> > > > > > >> > > >> >>> > > > > > > > > >> > > > > > >> > > >>> > > > > > > > > >> > > > > > >> > >>> > > > > > > > > >> > > > > > >> >>> > > > > > > > > >> > > > > > >>> > > > > > > > > >> > > > > >>> > > > > > > > > >> > > > >>> > > > > > > > > >> > > >>> > > > > > > > > >> > >>> > > > > > > > > >> >>> > > > > > > > > >>> > > > > > > > >>> > > > > > > >>> > > > > > >>> > > > > >>> > > > >>> > > >>> > >>> https://cwiki.apache.org/confluence/display/KAFKA/KIP-1266%3A+Bounding+The+Number+Of+RemoteLogMetadata+Messages+via+Compacted+Topic >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > Background: >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > The current Tiered >>> Storage >>> > > > > > > > > implementation >>> > > > > > > > > >> > uses >>> > > > > > > > > >> > > a >>> > > > > > > > > >> > > > > > >> > > >> > > > __remote_log_metadata >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > topic with infinite >>> > > retention >>> > > > > and >>> > > > > > > > > >> > delete-based >>> > > > > > > > > >> > > > > > cleanup >>> > > > > > > > > >> > > > > > >> > > policy, >>> > > > > > > > > >> > > > > > >> > > >> > > > causing >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > unbounded growth, slow >>> > > broker >>> > > > > > > > bootstrap, >>> > > > > > > > > >> no >>> > > > > > > > > >> > > > > mechanism >>> > > > > > > > > >> > > > > > >> to >>> > > > > > > > > >> > > > > > >> > > >> clean up >>> > > > > > > > > >> > > > > > >> > > >> > > > > expired >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > segment metadata, and >>> > > > > inefficient >>> > > > > > > > > >> re-reading >>> > > > > > > > > >> > > from >>> > > > > > > > > >> > > > > > >> offset 0 >>> > > > > > > > > >> > > > > > >> > > >> during >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > leadership changes. >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > Proposal: >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > A dual-topic approach >>> that >>> > > > > > > introduces >>> > > > > > > > a >>> > > > > > > > > >> new >>> > > > > > > > > >> > > > > > >> > > >> > > > > > >>> > > __remote_log_metadata_compacted >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > topic using log >>> compaction >>> > > > with >>> > > > > > > > > >> deterministic >>> > > > > > > > > >> > > > > > >> offset-based >>> > > > > > > > > >> > > > > > >> > > >> keys, >>> > > > > > > > > >> > > > > > >> > > >> > > > while >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > preserving the >>> existing >>> > > topic >>> > > > > for >>> > > > > > > > audit >>> > > > > > > > > >> > > history; >>> > > > > > > > > >> > > > > this >>> > > > > > > > > >> > > > > > >> > allows >>> > > > > > > > > >> > > > > > >> > > >> > > brokers >>> > > > > > > > > >> > > > > > >> > > >> > > > to >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > build their metadata >>> cache >>> > > > > > > exclusively >>> > > > > > > > > >> from >>> > > > > > > > > >> > the >>> > > > > > > > > >> > > > > > >> compacted >>> > > > > > > > > >> > > > > > >> > > >> topic, >>> > > > > > > > > >> > > > > > >> > > >> > > > > enables >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > cleanup of expired >>> segment >>> > > > > > metadata >>> > > > > > > > > >> through >>> > > > > > > > > >> > > > > > tombstones, >>> > > > > > > > > >> > > > > > >> > and >>> > > > > > > > > >> > > > > > >> > > >> > > includes >>> > > > > > > > > >> > > > > > >> > > >> > > > a >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > migration strategy to >>> > > populate >>> > > > > the >>> > > > > > > new >>> > > > > > > > > >> topic >>> > > > > > > > > >> > > > during >>> > > > > > > > > >> > > > > > >> > > >> > > > upgrade—delivering >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > bounded metadata >>> growth >>> > and >>> > > > > faster >>> > > > > > > > > broker >>> > > > > > > > > >> > > startup >>> > > > > > > > > >> > > > > > while >>> > > > > > > > > >> > > > > > >> > > >> > maintaining >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > backward >>> compatibility. >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > More details are in >>> the >>> > > > attached >>> > > > > > KIP >>> > > > > > > > > link. >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > Looking forward to >>> your >>> > > > > thoughts. >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > Thank you for your >>> time! >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > Best, >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > Lijun Tong >>> > > > > > > > > >> > > > > > >> > > >> > > > > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > > >>> > > > > > > > > >> > > > > > >> > > >> > > > >>> > > > > > > > > >> > > > > > >> > > >> > > >>> > > > > > > > > >> > > > > > >> > > >> > >>> > > > > > > > > >> > > > > > >> > > >> >>> > > > > > > > > >> > > > > > >> > > > >>> > > > > > > > > >> > > > > > >> > > >>> > > > > > > > > >> > > > > > >> > >>> > > > > > > > > >> > > > > > >> >>> > > > > > > > > >> > > > > > > >>> > > > > > > > > >> > > > > > >>> > > > > > > > > >> > > > > >>> > > > > > > > > >> > > > >>> > > > > > > > > >> > > >>> > > > > > > > > >> > >>> > > > > > > > > >> >>> > > > > > > > > > >>> > > > > > > > > >>> > > > > > > > >>> > > > > > > >>> > > > > > >>> > > > > >>> > > > >>> > > >>> > >>> >>
