Hi, David, Jose and Colin,

Thanks for the reply. A few more comments.

12. It seems that we haven't updated the AdminClient accordingly?

14. "Metadata snapshot is generated and sent to the other inactive
controllers and to brokers". I thought we wanted each broker to generate
its own snapshot independently? If only the controller generates the
snapshot, how do we force other brokers to pick it up?

16. If a feature version is new, one may not want to enable it immediately
after the cluster is upgraded. However, if a feature version has been
stable, requiring every user to run a command to upgrade to that version
seems inconvenient. One way to improve this is for each feature to define
one version as the default. Then, when we upgrade a cluster, we will
automatically upgrade the feature to the default version. An admin could
use the tool to upgrade to a version higher than the default.

20. "The quorum controller can assist with this process by generating a
metadata snapshot after a metadata.version increase has been committed to
the metadata log. This snapshot will be a convenient way to let broker and
controller components rebuild their entire in-memory state following an
upgrade." The new version of the software could read both the new and the
old version. Is generating a new snapshot during upgrade needed?

Jun


On Wed, Nov 3, 2021 at 5:42 PM Colin McCabe <cmcc...@apache.org> wrote:

> On Tue, Oct 12, 2021, at 10:34, Jun Rao wrote:
> > Hi, David,
> >
> > One more comment.
> >
> > 16. The main reason why KIP-584 requires finalizing a feature manually is
> > that in the ZK world, the controller doesn't know all brokers in a
> cluster.
> > A broker temporarily down is not registered in ZK. in the KRaft world,
> the
> > controller keeps track of all brokers, including those that are
> temporarily
> > down. This makes it possible for the controller to automatically
> finalize a
> > feature---it's safe to do so when all brokers support that feature. This
> > will make the upgrade process much simpler since no manual command is
> > required to turn on a new feature. Have we considered this?
> >
> > Thanks,
> >
> > Jun
>
> Hi Jun,
>
> I guess David commented on this point already, but I'll comment as well. I
> always had the perception that users viewed rolls as potentially risky and
> were looking for ways to reduce the risk. Not enabling features right away
> after installing new software seems like one way to do that. If we had a
> feature to automatically upgrade during a roll, I'm not sure that I would
> recommend that people use it, because if something fails, it makes it
> harder to tell if the new feature is at fault, or something else in the new
> software.
>
> We already tell users to do a "double roll" when going to a new IBP. (Just
> to give background to people who haven't heard that phrase, the first roll
> installs the new software, and the second roll updates the IBP). So this
> KIP-778 mechanism is basically very similar to that, except the second
> thing isn't a roll, but just an upgrade command. So I think this is
> consistent with what we currently do.
>
> Also, just like David said, we can always add auto-upgrade later if there
> is demand...
>
> best,
> Colin
>
>
> >
> > On Thu, Oct 7, 2021 at 5:19 PM Jun Rao <j...@confluent.io> wrote:
> >
> >> Hi, David,
> >>
> >> Thanks for the KIP. A few comments below.
> >>
> >> 10. It would be useful to describe how the controller node determines
> the
> >> RPC version used to communicate to other controller nodes. There seems
> to
> >> be a bootstrap problem. A controller node can't read the log and
> >> therefore the feature level until a quorum leader is elected. But leader
> >> election requires an RPC.
> >>
> >> 11. For downgrades, it would be useful to describe how to determine the
> >> downgrade process (generating new snapshot, propagating the snapshot,
> etc)
> >> has completed. We could block the UpdateFeature request until the
> process
> >> is completed. However, since the process could take time, the request
> could
> >> time out. Another way is through DescribeFeature and the server only
> >> reports downgraded versions after the process is completed.
> >>
> >> 12. Since we are changing UpdateFeaturesRequest, do we need to change
> the
> >> AdminClient api for updateFeatures too?
> >>
> >> 13. For the paragraph starting with "In the absence of an operator
> >> defined value for metadata.version", in KIP-584, we described how to
> >> finalize features with New cluster bootstrap. In that case, it's
> >> inconvenient for the users to have to run an admin tool to finalize the
> >> version for each feature. Instead, the system detects that the /features
> >> path is missing in ZK and thus automatically finalizes every feature
> with
> >> the latest supported version. Could we do something similar in the KRaft
> >> mode?
> >>
> >> 14. After the quorum leader generates a new snapshot, how do we force
> >> other nodes to pick up the new snapshot?
> >>
> >> 15. I agree with Jose that it will be useful to describe when
> generating a
> >> new snapshot is needed. To me, it seems the new snapshot is only needed
> >> when incompatible changes are made.
> >>
> >> 7. Jose, what control records were you referring?
> >>
> >> Thanks,
> >>
> >> Jun
> >>
> >>
> >> On Tue, Oct 5, 2021 at 8:53 AM David Arthur <davidart...@apache.org>
> >> wrote:
> >>
> >>> Jose, thanks for the thorough review and comments!
> >>>
> >>> I am out of the office until next week, so I probably won't be able to
> >>> update the KIP until then. Here are some replies to your questions:
> >>>
> >>> 1. Generate snapshot on upgrade
> >>> > > Metadata snapshot is generated and sent to the other nodes
> >>> > Why does the Active Controller need to generate a new snapshot and
> >>> > force a snapshot fetch from the replicas (inactive controller and
> >>> > brokers) on an upgrade? Isn't writing the FeatureLevelRecord good
> >>> > enough to communicate the upgrade to the replicas?
> >>>
> >>>
> >>> You're right, we don't necessarily need to _transmit_ a snapshot, since
> >>> each node can generate its own equivalent snapshot
> >>>
> >>> 2. Generate snapshot on downgrade
> >>> > > Metadata snapshot is generated and sent to the other inactive
> >>> > controllers and to brokers (this snapshot may be lossy!)
> >>> > Why do we need to send this downgraded snapshot to the brokers? The
> >>> > replicas have seen the FeatureLevelRecord and noticed the downgrade.
> >>> > Can we have the replicas each independently generate a downgraded
> >>> > snapshot at the offset for the downgraded FeatureLevelRecord? I
> assume
> >>> > that the active controller will guarantee that all records after the
> >>> > FatureLevelRecord use the downgraded version. If so, it would be good
> >>> > to mention that explicitly.
> >>>
> >>>
> >>> Similar to above, yes a broker that detects a downgrade via
> >>> FeatureLevelRecord could generate its own downgrade snapshot and reload
> >>> its
> >>> state from that. This does get a little fuzzy when we consider cases
> where
> >>> brokers are on different software versions and could be generating a
> >>> downgrade snapshot for version X, but using different versions of the
> >>> code.
> >>> It might be safer to let the controller generate the snapshot so each
> >>> broker (regardless of software version) gets the same records. However,
> >>> for
> >>> upgrades (or downgrades) we expect the whole cluster to be running the
> >>> same
> >>> software version before triggering the metadata.version change, so
> perhaps
> >>> this isn't a likely scenario. Thoughts?
> >>>
> >>>
> >>> 3. Max metadata version
> >>> > >For the first release that supports metadata.version, we can simply
> >>> > initialize metadata.version with the current (and only) version. For
> >>> future
> >>> > releases, we will need a mechanism to bootstrap a particular version.
> >>> This
> >>> > could be done using the meta.properties file or some similar
> mechanism.
> >>> The
> >>> > reason we need the allow for a specific initial version is to support
> >>> the
> >>> > use case of starting a Kafka cluster at version X with an older
> >>> > metadata.version.
> >>>
> >>>
> >>> I assume that the Active Controller will learn the metadata version of
> >>> > the broker through the BrokerRegistrationRequest. How will the Active
> >>> > Controller learn about the max metadata version of the inactive
> >>> > controller nodes? We currently don't send a registration request from
> >>> > the inactive controller to the active controller.
> >>>
> >>>
> >>> This came up during the design, but I neglected to add it to the KIP.
> We
> >>> will need a mechanism for determining the supported features of each
> >>> controller similar to how brokers use BrokerRegistrationRequest.
> Perhaps
> >>> controllers could write a FeatureLevelRecord (or similar) to the
> metadata
> >>> log indicating their supported version. WDYT?
> >>>
> >>> Why do you need to bootstrap a particular version? Isn't the intent
> >>> > that the broker will learn the active metadata version by reading the
> >>> > metadata before unfencing?
> >>>
> >>>
> >>> This bootstrapping is needed for when a KRaft cluster is first
> started. If
> >>> we don't have this mechanism, the cluster can't really do anything
> until
> >>> the operator finalizes the metadata.version with the tool. The
> >>> bootstrapping will be done by the controller and the brokers will see
> this
> >>> version as a record (like you say). I'll add some text to clarify this.
> >>>
> >>>
> >>> 4. Reject Registration - This is related to the bullet point above.
> >>> > What will be the behavior of the active controller if the broker
> sends
> >>> > a metadata version that is not compatible with the cluster wide
> >>> > metadata version?
> >>>
> >>>
> >>> If a broker starts up with a lower supported version range than the
> >>> current
> >>> cluster metadata.version, it should log an error and shutdown. This is
> in
> >>> line with KIP-584.
> >>>
> >>> 5. Discover upgrade
> >>> > > This snapshot will be a convenient way to let broker and controller
> >>> > components rebuild their entire in-memory state following an upgrade.
> >>> > Can we rely on the presence of the FeatureLevelRecord for the
> metadata
> >>> > version for this functionality? If so, it avoids having to reload the
> >>> > snapshot.
> >>>
> >>>
> >>> For upgrades, yes probably since we won't need to "rewrite" any
> records in
> >>> this case. For downgrades, we will need to generate the snapshot and
> >>> reload
> >>> everything.
> >>>
> >>> 6. Metadata version specification
> >>> > >  V4(version=4, isBackwardsCompatible=false, description="New
> metadata
> >>> > record type Bar"),
> >>>
> >>>
> >>> Very cool. Do you have plans to generate Apache Kafka HTML
> >>> > documentation for this information? Would be helpful to display this
> >>> > information to the user using the kafka-features.sh and feature RPC?
> >>>
> >>>
> >>> Hm good idea :) I'll add a brief section on documentation. This would
> >>> certainly be very useful
> >>>
> >>> 7.Downgrade records
> >>> > I think we should explicitly mention that the downgrade process will
> >>> > downgrade both metadata records and controller records. In KIP-630 we
> >>> > introduced two control records for snapshots.
> >>>
> >>>
> >>> Yes, good call. Let me re-read that KIP and include some details.
> >>>
> >>> Thanks again for the comments!
> >>> -David
> >>>
> >>>
> >>> On Wed, Sep 29, 2021 at 5:09 PM José Armando García Sancio
> >>> <jsan...@confluent.io.invalid> wrote:
> >>>
> >>> > One more comment.
> >>> >
> >>> > 7.Downgrade records
> >>> > I think we should explicitly mention that the downgrade process will
> >>> > downgrade both metadata records and controller records. In KIP-630 we
> >>> > introduced two control records for snapshots.
> >>> >
> >>>
> >>
>

Reply via email to