[
https://issues.apache.org/jira/browse/KAFKA-14922?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18094094#comment-18094094
]
Preethi KCS edited comment on KAFKA-14922 at 7/6/26 7:02 PM:
-------------------------------------------------------------
Based on the latest comments, I think we have converged on the design, but I
wanted to summarize it to make sure we're all aligned before I update the PR.
There were two possible approaches:
# *Reuse the existing* {{*--force*}} *flag* to bypass the new application-id
existence validation.
# *Introduce a separate flag* (for example,-skip-application-id-validation)
while keeping {{-force}} only for removing active consumer group members.
*From the discussion, my understanding is that reusing {{--force (Approach 1)}}
is the preferred approach.*
The reasoning is that --force is intended to mean {*}"force the reset"{*},
rather than {*}"force remove members"{*}. Removing active members is simply one
implementation detail that allows the reset to proceed. Similarly, bypassing
the application-id existence validation is another check that can block the
reset. Since these two scenarios are mutually exclusive in practice (if the
group doesn't exist, there are no members to remove; if there are active
members, the group necessarily exists), a single {{-force}} does not introduce
ambiguous runtime behavior.
Given that understanding, this appears to be an implementation change rather
than introducing new CLI semantics, so I don't think a KIP is necessary for
this fix.
I'll proceed with updating the PR and documentation accordingly. Please let me
know if you have any questions or concerns.
[~mjsax] [~alisa23]
was (Author: JIRAUSER312624):
Based on the latest comments, I think we have converged on the design, but I
wanted to summarize it to make sure we're all aligned before I update the PR.
There were two possible approaches:
# *Reuse the existing* {{*--force*}} *flag* to bypass the new application-id
existence validation.
# *Introduce a separate flag* (for example,-skip-application-id-validation)
while keeping {{-force}} only for removing active consumer group members.
>From the discussion, my understanding is that reusing {{--force}} is the
>preferred approach.
The reasoning is that --force is intended to mean {*}"force the reset"{*},
rather than {*}"force remove members"{*}. Removing active members is simply one
implementation detail that allows the reset to proceed. Similarly, bypassing
the application-id existence validation is another check that can block the
reset. Since these two scenarios are mutually exclusive in practice (if the
group doesn't exist, there are no members to remove; if there are active
members, the group necessarily exists), a single {{-force}} does not introduce
ambiguous runtime behavior.
Given that understanding, this appears to be an implementation change rather
than introducing new CLI semantics, so I don't think a KIP is necessary for
this fix.
I'll proceed with updating the PR and documentation accordingly. Please let me
know if you have any questions or concerns.
[~mjsax] [~alisa23]
> kafka-streams-application-reset deletes topics not belonging to specified
> application-id
> ----------------------------------------------------------------------------------------
>
> Key: KAFKA-14922
> URL: https://issues.apache.org/jira/browse/KAFKA-14922
> Project: Kafka
> Issue Type: Bug
> Components: streams, tools
> Affects Versions: 3.4.0
> Reporter: Jørgen
> Assignee: Preethi KCS
> Priority: Major
> Labels: beginner, needs-kip, newbie
>
> Slack-thread:
> [https://confluentcommunity.slack.com/archives/C48AHTCUQ/p1681908267206849]
> When running the command _kafka-streams-application-reset --bootstrap-servers
> $BOOTSTRAP --application-id foo_ all internal topics that _starts with_ foo
> is deleted. This happens even if there's no application-id named foo.
> Example:
> {code:java}
> Application IDs:
> foo-v1
> foo-v2
> Internal topics:
> foo-v1-repartition-topic-repartition
> foo-v2-repartition-topic-repartition
> Application reset:
> kafka-streams-application-reset --bootstrap-servers $BOOTSTRAP
> --application-id foo
> > No input or intermediate topics specified. Skipping seek.
> Deleting inferred internal topics [foo-v2-repartition-topic-repartition,
> foo-v1-repartition-topic-repartition]
> Done.{code}
> Expected behaviour is that the command fails as there are no application-id's
> with the name foo instead of deleting all foo* topics.
> This is critical on typos or if application-ids starts with the same name as
> others (for example if we had foo-v21 and wanted to reset foo-v2)
> The bug should be located here:
> [https://github.com/apache/kafka/blob/c14f56b48461f01743146d58987bc8661ba0d459/tools/src/main/java/org/apache/kafka/tools/StreamsResetter.java#L693]
> Should check that the topics matches the application-id exactly instead of
> checking that it starts with the application-id.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)