[
https://issues.apache.org/jira/browse/KAFKA-7481?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16658580#comment-16658580
]
Ewen Cheslack-Postava commented on KAFKA-7481:
----------------------------------------------
[~ijuma] Arguably your suggestion isn't something we should do in a minor
version since it is a breaking semantic change, though I don't know whether
we've really committed to the reversibility of inter broker protocol version.
The upgrade notes already don't really point out that you can roll that back.
In fact, reading them now I'm not sure how many people even realize this is
possible – we never really explain anything about *why* the upgrade process is
the way it is. At a bare minimum, if we're aware of any cases where people have
rolled back without reverting the broker version entirely, I would be wary of
changing the semantics like this.
I think the tension between the two existing configs is that
inter.broker.protocol.version *today* is basically all the stateless protocol
stuff, which makes it safe to upgrade/downgrade, whereas
log.message.format.version is about persisted format, but for client-facing
data. The consumer state (and other examples from the KIP) are internal but
persistent, which makes neither a great fit.
re: being too complicated to explain, it seems like today we basically just
rely on telling them the mechanics and only for log.message.format.version do
we go into a bit more detail, and only because of the perf impact. If we just
documented what to do with the new config and it just fits in alongside one of
the other two for the common case, is it really that much more complicated?
We should probably also be clear about upgrade/downgrade scenarios. For
example, the rejected alternatives state:
{quote}
# We considered overloading `inter.broker.protocol.version` to include changes
to the persistent metadata format. The main drawback is that users cannot test
features which depend on the inter-broker protocol behavior without committing
to the upgrade. For example, KIP-320 makes changes to replication protocol
which may require additional testing.
{quote}
It took me a while to realize that "without committing to the upgrade"
specifically means the *broker version upgrade*, not the *upgrade to the
metadata format*. Even with a new config, you could roll back further use of
that format, but brokers could still process the data (as mentioned elsewhere
in the KIP wrt an in-progress rolling update to turn on the new format) as long
as it is compatible (and it seems likely we'd always have a compatibility path
since we could always have clusters with both formats).
I'm hesitant to add more configs since we already have tons, but I also
wouldn't want to conflate two things in one config unless we're really
convinced they belong together. I'd rather have the configs and then hide them
behind some aggregate config that overrides them and handles the 99% use case
as cleanly as possible than end up with fewer configs but which are harder to
reason about.
> Consider options for safer upgrade of offset commit value schema
> ----------------------------------------------------------------
>
> Key: KAFKA-7481
> URL: https://issues.apache.org/jira/browse/KAFKA-7481
> Project: Kafka
> Issue Type: Bug
> Reporter: Jason Gustafson
> Priority: Blocker
> Fix For: 2.1.0
>
>
> KIP-211 and KIP-320 add new versions of the offset commit value schema. The
> use of the new schema version is controlled by the
> `inter.broker.protocol.version` configuration. Once the new inter-broker
> version is in use, it is not possible to downgrade since the older brokers
> will not be able to parse the new schema.
> The options at the moment are the following:
> 1. Do nothing. Users can try the new version and keep
> `inter.broker.protocol.version` locked to the old release. Downgrade will
> still be possible, but users will not be able to test new capabilities which
> depend on inter-broker protocol changes.
> 2. Instead of using `inter.broker.protocol.version`, we could use
> `message.format.version`. This would basically extend the use of this config
> to apply to all persistent formats. The advantage is that it allows users to
> upgrade the broker and begin using the new inter-broker protocol while still
> allowing downgrade. But features which depend on the persistent format could
> not be tested.
> Any other options?
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)