Thank you Chris. I agree with what you have suggested.
I have updated the KIP, please let me know if I missed anything or if there
is any other question.

Regards,
Tina

On Tue, Feb 14, 2023 at 4:40 PM Chris Egerton <chr...@aiven.io.invalid>
wrote:

> Hi Tina,
>
> While I agree that it's reasonable for users to want to favor the source
> cluster's defaults over the target cluster's, I'm hesitant to change this
> behavior in an opt-out fashion. IMO it's better to allow users to opt into
> this (by adding a method to the ConfigPropertyFilter interface, and
> possibly extending the DefaultConfigPropertyFilter with configuration
> properties related to how it should handle source cluster defaults), but we
> should try to preserve the existing behavior by default.
>
> Cheers,
>
> Chris
>
> On Mon, Feb 13, 2023 at 5:10 PM Gantigmaa Selenge <gsele...@redhat.com>
> wrote:
>
> > Hi Chris
> >
> > My comment on the second point is not correct. Please ignore the part
> about
> > the config source (config source does set back to DEFAULT_CONFIG when
> > deleting a config). I got diverted off the issue a little bit.
> >
> > With the legacy API, we do propagate deletion due to resetting all the
> > configs on that target topic that are not being replicated. However with
> > incrementalAlterConfigs API, this changes. If we delete a config that was
> > previously altered on the source topic, the config on the target topic is
> > left with the previous value as the default configs are not replicated.
> The
> > reason for favouring the source defaults was because it would set the
> > config on the target topic with the source's default in this situation.
> >
> > Regards,
> > Tina
> >
> > On Mon, Feb 13, 2023 at 8:15 AM Gantigmaa Selenge <gsele...@redhat.com>
> > wrote:
> >
> > > Hi Chris and Luke,
> > >
> > > Thank you very much for your feedback.
> > >
> > > I have addressed some of the suggestions and would like to clarify a
> few
> > > things on the others:
> > >
> > > > 1) The current logic for syncing topic configs in MM2 is basically
> > > fire-and-forget; all we do is log a warning message [1] if an attempt
> > > fails. When "use.incremental.alter.configs" is set to "requested",
> we'll
> > > need to know whether attempts using the incremental API succeed or not,
> > and
> > > then adjust our behavior accordingly. Will the plan here be to block on
> > the
> > > success/failure of the first request before sending any more, or will
> we
> > > just switch over to the legacy API as soon as any request fails due to
> > > targeting an incompatible broker, possibly after multiple requests with
> > the
> > > new API have been sent or at least queued up in the admin client?
> > >
> > > When it's set to "requested", I think the suggestion was to just switch
> > > over to the legacy API as soon as any request fails due to
> > > targeting an incompatible broker. We could keep using the legacy API
> > until
> > > the mirrormaker setting is changed by the user or the mirrormaker
> > restarts
> > > instead of trying the new API every time it syncs the configurations.
> I'm
> > > not sure which approach is the best here.
> > >
> > > > 2) We don't replicate default properties from the source cluster
> right
> > > now
> > > [2].
> > > Won't making ConfigPropertyFilter::shouldReplicateSourceDefault return
> > true
> > > by default change that behavior? If so, what's the motivation for
> > favoring
> > > defaults from the source cluster over defaults for the target cluster,
> > > especially given that users may already be relying on the opposite?
> > >
> > > The concern was around what happens if deleting a topic config in
> > > the source cluster. I initially thought, because the legacy API resets
> > all
> > > the configs other than the ones being altered, it effectively
> propagates
> > > the deletions of a config in the source cluster. I thought by migrating
> > to
> > > incrementalAlterConfig API, the deletion would no longer get propagated
> > but
> > > looking into it again, it may not be the case.
> > >
> > > If the user deletes a config in the source cluster, it would be reset
> to
> > > the default value but the config source does not change back to
> > > DEFAULT_CONFIG. For example:
> > >
> > > ./kafka-configs.sh --alter --entity-type topics --entity-name
> > > quickstart-events --add-config retention.ms=720000 --bootstrap-server
> > > localhost:9092
> > >
> > >
> > > /kafka-configs.sh --describe --entity-type topics --entity-name
> > > quickstart-events --bootstrap-server localhost:9092
> > >
> > > Dynamic configs for topic quickstart-events are:
> > >
> > >   retention.ms=720000 sensitive=false synonyms={DYNAMIC_TOPIC_CONFIG:
> > > retention.ms=720000}
> > >
> > >
> > > ./kafka-configs.sh --alter --entity-type topics --entity-name
> > > quickstart-events --delete-config retention.ms  --bootstrap-server
> > > localhost:9092
> > >
> > >
> > > /kafka-configs.sh --describe --entity-type topics --entity-name
> > > quickstart-events --bootstrap-server localhost:9092
> > >
> > >   retention.ms=604800000 sensitive=false synonyms={}
> > >
> > >
> > > Therefore, even with the legacy API, the deletion of the source topic
> > does
> > > not actually get propagated because isDefault() check here
> > > <
> >
> https://github.com/apache/kafka/blob/6e2b86597d9cd7c8b2019cffb895522deb63c93a/connect/mirror/src/main/java/org/apache/kafka/connect/mirror/MirrorSourceConnector.java#L460
> > >
> > > would no longer return true. Basically, if a user deletes a config for
> > the
> > > source topic, with either API, the config on the target topic is
> > > overwritten with the source cluster's default. if I understood this
> > > correctly, maybe we don't need to extend ConfigPropertyFilter as it
> would
> > > still rely on DEFAULT_CONFIG config source and the KIP is not changing
> > the
> > > current behaviour?
> > >
> > > I have addressed the last comment from Chris about excluding code level
> > > details from the proposed solution.
> > >
> > > I also have addressed Luke's comment about the compatibility section.
> > >
> > > Please let me know what you think.
> > >
> > > Regards,
> > > Tina
> > >
> > >
> > > On Tue, Feb 7, 2023 at 8:06 AM Luke Chen <show...@gmail.com> wrote:
> > >
> > >> Hi Tina,
> > >>
> > >> Thanks for the KIP to fix the issue.
> > >>
> > >> Some comments:
> > >> 1. In the compatibility section, you said:
> > >> `By default, the new setting will be set to false so it does not
> change
> > >> the
> > >> current behaviour.`
> > >>
> > >> I'm confused, what is the config we need to set to `false` to avoid
> > >> breaking compatibility?
> > >> All I can see is there is one new config introduced:
> > >> use.incremental.alter.configs, and default to "requested".
> > >> Does that mean it'll change current behavior?
> > >> If so, I think we should make it clear in the compatibility section
> > about
> > >> what will be changed after this KIP.
> > >>
> > >> 2. It looks like you're going to introduce a new method in the
> existing
> > >> interface. Could you follow the pattern in other KIP (ex: KIP-888
> > >> <
> > >>
> >
> https://cwiki.apache.org/confluence/display/KAFKA/KIP-888%3A+Batch+describe+ACLs+and+describe+client+quotas#KIP888:BatchdescribeACLsanddescribeclientquotas-NewAdminAPIs
> > >> >)
> > >> to list the javadoc and the method name together?
> > >>
> > >> Thank you.
> > >> Luke
> > >>
> > >>
> > >> On Fri, Feb 3, 2023 at 11:46 PM Chris Egerton <chr...@aiven.io.invalid
> >
> > >> wrote:
> > >>
> > >> > Hi Tina,
> > >> >
> > >> > Thanks for the KIP! I recently ran into this exact issue and it's
> > great
> > >> to
> > >> > see a fix being proposed. I have a few small comments but overall
> this
> > >> > looks good:
> > >> >
> > >> > 1) The current logic for syncing topic configs in MM2 is basically
> > >> > fire-and-forget; all we do is log a warning message [1] if an
> attempt
> > >> > fails. When "use.incremental.alter.configs" is set to "requested",
> > we'll
> > >> > need to know whether attempts using the incremental API succeed or
> > not,
> > >> and
> > >> > then adjust our behavior accordingly. Will the plan here be to block
> > on
> > >> the
> > >> > success/failure of the first request before sending any more, or
> will
> > we
> > >> > just switch over to the legacy API as soon as any request fails due
> to
> > >> > targeting an incompatible broker, possibly after multiple requests
> > with
> > >> the
> > >> > new API have been sent or at least queued up in the admin client?
> > >> >
> > >> > 2) We don't replicate default properties from the source cluster
> right
> > >> now
> > >> > [2].
> > >> > Won't making ConfigPropertyFilter::shouldReplicateSourceDefault
> return
> > >> true
> > >> > by default change that behavior? If so, what's the motivation for
> > >> favoring
> > >> > defaults from the source cluster over defaults for the target
> cluster,
> > >> > especially given that users may already be relying on the opposite?
> > >> >
> > >> > 3) Nit: IMO the parts in the "proposed changes" section that detail
> > >> changes
> > >> > to internal classes aren't really necessary since they're not
> relevant
> > >> to
> > >> > user-facing behavior and the classes/methods described in them might
> > >> change
> > >> > between now and when the PR for the KIP gets
> opened/reviewed/merged. I
> > >> > think the only points that need to be in the KIP are the ones
> > beginning
> > >> > with "Extend ConfigPropertyFilter class", "Add a new configuration
> > >> setting
> > >> > to MirrorMaker", and "From Kafka 4.0" (which itself can just
> describe
> > >> the
> > >> > broker APIs that are used by MM2 in general, without referring to
> the
> > >> > specific name of the method in MM2 that will call them).
> > >> >
> > >> > [1] -
> > >> >
> > >> >
> > >>
> >
> https://github.com/apache/kafka/blob/6e2b86597d9cd7c8b2019cffb895522deb63c93a/connect/mirror/src/main/java/org/apache/kafka/connect/mirror/MirrorSourceConnector.java#L429
> > >> >
> > >> > [2] -
> > >> >
> > >> >
> > >>
> >
> https://github.com/apache/kafka/blob/6e2b86597d9cd7c8b2019cffb895522deb63c93a/connect/mirror/src/main/java/org/apache/kafka/connect/mirror/MirrorSourceConnector.java#L460
> > >> >
> > >> > Thanks again for the KIP!
> > >> >
> > >> > Cheers,
> > >> >
> > >> > Chris
> > >> >
> > >> > On Wed, Jan 25, 2023 at 10:44 AM Gantigmaa Selenge <
> > gsele...@redhat.com
> > >> >
> > >> > wrote:
> > >> >
> > >> > > Hi,
> > >> > >
> > >> > > If there are no further comments on the KIP, I will start a vote
> on
> > >> it.
> > >> > >
> > >> > > Regards,
> > >> > >
> > >> > >
> > >> > > On Mon, Jan 16, 2023 at 11:14 AM Gantigmaa Selenge <
> > >> gsele...@redhat.com>
> > >> > > wrote:
> > >> > >
> > >> > > > Thanks everyone.
> > >> > > >
> > >> > > > I took the suggestions and updated the KIP accordingly. Please
> let
> > >> me
> > >> > > know
> > >> > > > if there is anything else I could improve on.
> > >> > > >
> > >> > > > Regards,
> > >> > > > Tina
> > >> > > >
> > >> > > > On Sun, Jan 15, 2023 at 10:24 PM Ismael Juma <ism...@juma.me.uk
> >
> > >> > wrote:
> > >> > > >
> > >> > > >> Hi Tina,
> > >> > > >>
> > >> > > >> See below.
> > >> > > >>
> > >> > > >> On Wed, Jan 11, 2023 at 3:03 AM Gantigmaa Selenge <
> > >> > gsele...@redhat.com>
> > >> > > >> wrote:
> > >> > > >>
> > >> > > >> > I do like this idea, however when it's set to required, I
> > wasn't
> > >> > sure
> > >> > > >> how
> > >> > > >> > the mirrormaker should have. It's probably not a great
> > >> experience if
> > >> > > >> > mirrormaker starts crashing at some point after it's already
> > >> running
> > >> > > >> due to
> > >> > > >> > an incompatible broker version.
> > >> > > >> >
> > >> > > >>
> > >> > > >> This would only happen if the user explicitly requests the
> strict
> > >> > > required
> > >> > > >> ("non fallback") mode. There are many reasons why one may want
> > >> this:
> > >> > say
> > >> > > >> you want to be sure that your system is not susceptible to the
> > >> > > >> "alterConfigs" problems or you want to write a test that fails
> if
> > >> > > >> "alterConfigs' is used.
> > >> > > >>
> > >> > > >>
> > >> > > >> > If the incrementalAlterConfig request fails because the
> target
> > >> > cluster
> > >> > > >> is
> > >> > > >> > running an older version, then we could log a WARN message
> that
> > >> says
> > >> > > >> > something like  "The config to use incrementalAlterConfig API
> > for
> > >> > > >> syncing
> > >> > > >> > topic configurations has been set to true however target
> > cluster
> > >> is
> > >> > > >> running
> > >> > > >> > incompatible version therefore using the legacy alterConfig
> > API".
> > >> > This
> > >> > > >> way
> > >> > > >> > the Mirrormaker never has to stop working and makes the user
> > >> aware
> > >> > of
> > >> > > >> > what's being used.
> > >> > > >>
> > >> > > >>
> > >> > > >> Logging statements are not great as the sole mechanism
> (although
> > >> > useful
> > >> > > as
> > >> > > >> a complementary one) since one cannot easily test against them
> > and
> > >> > > they're
> > >> > > >> often missed alongside all the other logging statements.
> > >> > > >>
> > >> > > >>
> > >> > > >> >   In this case, we also would not need 3 separate values
> > >> > > >> > for the config, instead would use the original true or false
> > >> values:
> > >> > > >> > - true - > would use incrementalAlterConfig API, but if it's
> > >> > > >> unavailable,
> > >> > > >> > fallback to the legacy API
> > >> > > >> > - false -> keep using the legacy API
> > >> > > >> >
> > >> > > >> > Set the flag to true by default and remove the config in 4.0.
> > >> > > >> >
> > >> > > >>
> > >> > > >> But this means you have different behavior depending on the
> > >> > > >> supported versions forever. Even though the config values are
> > >> simpler,
> > >> > > >> it's
> > >> > > >> harder to reason about the behavior.
> > >> > > >>
> > >> > > >> > One suggestion: I'm not sure how concerned you are about
> > people's
> > >> > > >> ability
> > >> > > >> > to migrate, but if you want to make it as smooth as possible,
> > you
> > >> > > could
> > >> > > >> add
> > >> > > >> > one more step. In the 4.0 release, while removing
> > >> > > >> > `use.incremental.alter.configs`, you can also add
> > >> > > >> > `use.legacy.alter.configs` to give users a path to continue
> > using
> > >> > the
> > >> > > >> old
> > >> > > >> > behavior even after the default changes.
> > >> > > >> >
> > >> > > >> > If we implement the fallback logic as Ismael suggested
> above, I
> > >> > think
> > >> > > we
> > >> > > >> > would not need this extra flag later anymore.
> > >> > > >> >
> > >> > > >> > Please let me know what you think. Then I can go ahead and
> > update
> > >> > the
> > >> > > >> KIP.
> > >> > > >>
> > >> > > >>
> > >> > > >> IncrementalAlterConfigs has been around since Apache Kafka 2.3,
> > >> > released
> > >> > > >> in
> > >> > > >> June 2019. By the time Apache Kafka 4.0 is released, it will
> have
> > >> been
> > >> > > at
> > >> > > >> least 4.5 years. I think it's reasonable to set it as the new
> > >> baseline
> > >> > > and
> > >> > > >> not maintain the fallback code. The key benefit is having
> > behavior
> > >> > that
> > >> > > is
> > >> > > >> easy to reason about.
> > >> > > >>
> > >> > > >> Ismael
> > >> > > >>
> > >> > > >
> > >> > >
> > >> >
> > >>
> > >
> >
>

Reply via email to