Hi Jun, Sorry the links were broken in my last response, here are the right links:
200. https://cwiki.apache.org/confluence/display/KAFKA/KIP-584%3A+Versioning+scheme+for+features#KIP-584:Versioning Scheme For Features-Validations <https://cwiki.apache.org/confluence/display/KAFKA/KIP-584%3A+Versioning+scheme+for+features#KIP-584:Versioningschemeforfeatures-Validations> 110. https://cwiki.apache.org/confluence/display/KAFKA/KIP-584%3A+Versioning+scheme+for+features#KIP-584:Versioningschemeforfeatures-When To Use Versioned Feature Flags? <https://cwiki.apache.org/confluence/display/KAFKA/KIP-584%3A+Versioning+scheme+for+features#KIP-584:Versioningschemeforfeatures-Whentouseversionedfeatureflags?> Cheers, Kowshik On Wed, Apr 15, 2020 at 6:24 PM Kowshik Prakasam <kpraka...@confluent.io> wrote: > > Hi Jun, > > Thanks for the feedback! I have addressed the comments in the KIP. > > > 200. In the validation section, there is still the text "*from* > > {"max_version_level": > > X} *to* {"max_version_level": X’}". It seems that it should say "from X > to > > Y"? > > (Kowshik): Done. I have reworded it a bit to make it clearer now in this > section: > > https://cwiki.apache.org/confluence/display/KAFKA/KIP-584%3A+Versioning+scheme+for+features#KIP-584:Versioningschemeforfeatures-Validations > > > 110. Could we add that we need to document the bumped version of each > > feature in the upgrade section of a release? > > (Kowshik): Great point! Done, I have mentioned it in #3 this section: > https://cwiki.apache.org/confluence/display/KAFKA/KIP-584 > <https://issues.apache.org/jira/browse/KIP-584> > %3A+Versioning+scheme+for+features#KIP-584 > <https://issues.apache.org/jira/browse/KIP-584> > :Versioningschemeforfeatures-Whentouseversionedfeatureflags? > > > Cheers, > Kowshik > > On Wed, Apr 15, 2020 at 4:00 PM Jun Rao <j...@confluent.io> wrote: > >> Hi, Kowshik, >> >> Looks good to me now. Just a couple of minor things below. >> >> 200. In the validation section, there is still the text "*from* >> {"max_version_level": >> X} *to* {"max_version_level": X’}". It seems that it should say "from X to >> Y"? >> >> 110. Could we add that we need to document the bumped version of each >> feature in the upgrade section of a release? >> >> Thanks, >> >> Jun >> >> On Wed, Apr 15, 2020 at 1:08 PM Kowshik Prakasam <kpraka...@confluent.io> >> wrote: >> >> > Hi Jun, >> > >> > Thank you for the suggestion! I have updated the KIP, please find my >> > response below. >> > >> > > 200. I guess you are saying only when the allowDowngrade field is set, >> > the >> > > finalized feature version can go backward. Otherwise, it can only go >> up. >> > > That makes sense. It would be useful to make that clear when >> explaining >> > > the usage of the allowDowngrade field. In the validation section, we >> > have " >> > > /features' from {"max_version_level": X} to {"max_version_level": >> X’}", >> > it >> > > seems that we need to mention Y there. >> > >> > (Kowshik): Great point! Yes, that is correct. Done, I have updated the >> > validations >> > section explaining the above. Here is a link to this section: >> > >> > >> https://cwiki.apache.org/confluence/display/KAFKA/KIP-584%3A+Versioning+scheme+for+features#KIP-584:Versioningschemeforfeatures-Validations >> > >> > >> > Cheers, >> > Kowshik >> > >> > >> > >> > >> > On Wed, Apr 15, 2020 at 11:05 AM Jun Rao <j...@confluent.io> wrote: >> > >> > > Hi, Kowshik, >> > > >> > > 200. I guess you are saying only when the allowDowngrade field is set, >> > the >> > > finalized feature version can go backward. Otherwise, it can only go >> up. >> > > That makes sense. It would be useful to make that clear when >> explaining >> > > the usage of the allowDowngrade field. In the validation section, we >> have >> > > " >> > > /features' from {"max_version_level": X} to {"max_version_level": >> X’}", >> > it >> > > seems that we need to mention Y there. >> > > >> > > Thanks, >> > > >> > > Jun >> > > >> > > On Wed, Apr 15, 2020 at 10:44 AM Kowshik Prakasam < >> > kpraka...@confluent.io> >> > > wrote: >> > > >> > > > Hi Jun, >> > > > >> > > > Great question! Please find my response below. >> > > > >> > > > > 200. My understanding is that If the CLI tool passes the >> > > > > '--allow-downgrade' flag when updating a specific feature, then a >> > > future >> > > > > downgrade is possible. Otherwise, the feature is now >> downgradable. If >> > > so, >> > > > I >> > > > > was wondering how the controller remembers this since it can be >> > > restarted >> > > > > over time? >> > > > >> > > > (Kowshik): The purpose of the flag was to just restrict the user >> intent >> > > for >> > > > a specific request. >> > > > It seems to me that to avoid confusion, I could call the flag as >> > > > `--try-downgrade` instead. >> > > > Then this makes it clear, that, the controller just has to consider >> the >> > > ask >> > > > from >> > > > the user as an explicit request to attempt a downgrade. >> > > > >> > > > The flag does not act as an override on controller's decision making >> > that >> > > > decides whether >> > > > a flag is downgradable (these decisions on whether to allow a flag >> to >> > be >> > > > downgraded >> > > > from a specific version level, can be embedded in the controller >> code). >> > > > >> > > > Please let me know what you think. >> > > > Sorry if I misunderstood the original question. >> > > > >> > > > >> > > > Cheers, >> > > > Kowshik >> > > > >> > > > >> > > > On Wed, Apr 15, 2020 at 9:40 AM Jun Rao <j...@confluent.io> wrote: >> > > > >> > > > > Hi, Kowshik, >> > > > > >> > > > > Thanks for the reply. Makes sense. Just one more question. >> > > > > >> > > > > 200. My understanding is that If the CLI tool passes the >> > > > > '--allow-downgrade' flag when updating a specific feature, then a >> > > future >> > > > > downgrade is possible. Otherwise, the feature is now >> downgradable. If >> > > > so, I >> > > > > was wondering how the controller remembers this since it can be >> > > restarted >> > > > > over time? >> > > > > >> > > > > Jun >> > > > > >> > > > > >> > > > > On Tue, Apr 14, 2020 at 6:49 PM Kowshik Prakasam < >> > > kpraka...@confluent.io >> > > > > >> > > > > wrote: >> > > > > >> > > > > > Hi Jun, >> > > > > > >> > > > > > Thanks a lot for the feedback and the questions! >> > > > > > Please find my response below. >> > > > > > >> > > > > > > 200. The UpdateFeaturesRequest includes an AllowDowngrade >> field. >> > It >> > > > > seems >> > > > > > > that field needs to be persisted somewhere in ZK? >> > > > > > >> > > > > > (Kowshik): Great question! Below is my explanation. Please help >> me >> > > > > > understand, >> > > > > > if you feel there are cases where we would need to still >> persist it >> > > in >> > > > > ZK. >> > > > > > >> > > > > > Firstly I have updated my thoughts into the KIP now, under the >> > > > > 'guidelines' >> > > > > > section: >> > > > > > >> > > > > > >> > > > > >> > > > >> > > >> > >> https://cwiki.apache.org/confluence/display/KAFKA/KIP-584%3A+Versioning+scheme+for+features#KIP-584:Versioningschemeforfeatures-Guidelinesonfeatureversionsandworkflows >> > > > > > >> > > > > > The allowDowngrade boolean field is just to restrict the user >> > intent, >> > > > and >> > > > > > to remind >> > > > > > them to double check their intent before proceeding. It should >> be >> > set >> > > > to >> > > > > > true >> > > > > > by the user in a request, only when the user intent is to >> > forcefully >> > > > > > "attempt" a >> > > > > > downgrade of a specific feature's max version level, to the >> > provided >> > > > > value >> > > > > > in >> > > > > > the request. >> > > > > > >> > > > > > We can extend this safeguard. The controller (on it's end) can >> > > maintain >> > > > > > rules in the code, that, for safety reasons would outright >> reject >> > > > certain >> > > > > > downgrades >> > > > > > from a specific max_version_level for a specific feature. Such >> > > > rejections >> > > > > > may >> > > > > > happen depending on the feature being downgraded, and from what >> > > version >> > > > > > level. >> > > > > > >> > > > > > The CLI tool only allows a downgrade attempt in conjunction with >> > > > specific >> > > > > > flags and sub-commands. For example, in the CLI tool, if the >> user >> > > uses >> > > > > the >> > > > > > 'downgrade-all' command, or passes '--allow-downgrade' flag when >> > > > > updating a >> > > > > > specific feature, only then the tool will translate this ask to >> > > setting >> > > > > > 'allowDowngrade' field in the request to the server. >> > > > > > >> > > > > > > 201. UpdateFeaturesResponse has the following top level >> fields. >> > > > Should >> > > > > > > those fields be per feature? >> > > > > > > >> > > > > > > "fields": [ >> > > > > > > { "name": "ErrorCode", "type": "int16", "versions": "0+", >> > > > > > > "about": "The error code, or 0 if there was no error." >> }, >> > > > > > > { "name": "ErrorMessage", "type": "string", "versions": >> "0+", >> > > > > > > "about": "The error message, or null if there was no >> > error." >> > > } >> > > > > > > ] >> > > > > > >> > > > > > (Kowshik): Great question! >> > > > > > As such, the API is transactional, as explained in the sections >> > > linked >> > > > > > below. >> > > > > > Either all provided FeatureUpdate was applied, or none. >> > > > > > It's the reason I felt we can have just one error code + >> message. >> > > > > > Happy to extend this if you feel otherwise. Please let me know. >> > > > > > >> > > > > > Link to sections: >> > > > > > >> > > > > > >> > > > > > >> > > > > >> > > > >> > > >> > >> https://cwiki.apache.org/confluence/display/KAFKA/KIP-584%3A+Versioning+scheme+for+features#KIP-584:Versioningschemeforfeatures-ChangestoKafkaController >> > > > > > >> > > > > > >> > > > > > >> > > > > >> > > > >> > > >> > >> https://cwiki.apache.org/confluence/display/KAFKA/KIP-584%3A+Versioning+scheme+for+features#KIP-584:Versioningschemeforfeatures-Guarantees >> > > > > > >> > > > > > > 202. The /features path in ZK has a field min_version_level. >> > Which >> > > > API >> > > > > > and >> > > > > > > tool can change that value? >> > > > > > >> > > > > > (Kowshik): Great question! Currently this cannot be modified by >> > using >> > > > the >> > > > > > API or the tool. >> > > > > > Feature version deprecation (by raising min_version_level) can >> be >> > > done >> > > > > only >> > > > > > by the Controller directly. The rationale is explained in this >> > > section: >> > > > > > >> > > > > > >> > > > > > >> > > > > >> > > > >> > > >> > >> https://cwiki.apache.org/confluence/display/KAFKA/KIP-584%3A+Versioning+scheme+for+features#KIP-584:Versioningschemeforfeatures-Featureversiondeprecation >> > > > > > >> > > > > > >> > > > > > Cheers, >> > > > > > Kowshik >> > > > > > >> > > > > > On Tue, Apr 14, 2020 at 5:33 PM Jun Rao <j...@confluent.io> >> wrote: >> > > > > > >> > > > > > > Hi, Kowshik, >> > > > > > > >> > > > > > > Thanks for addressing those comments. Just a few more minor >> > > comments. >> > > > > > > >> > > > > > > 200. The UpdateFeaturesRequest includes an AllowDowngrade >> field. >> > It >> > > > > seems >> > > > > > > that field needs to be persisted somewhere in ZK? >> > > > > > > >> > > > > > > 201. UpdateFeaturesResponse has the following top level >> fields. >> > > > Should >> > > > > > > those fields be per feature? >> > > > > > > >> > > > > > > "fields": [ >> > > > > > > { "name": "ErrorCode", "type": "int16", "versions": "0+", >> > > > > > > "about": "The error code, or 0 if there was no error." >> }, >> > > > > > > { "name": "ErrorMessage", "type": "string", "versions": >> "0+", >> > > > > > > "about": "The error message, or null if there was no >> > error." >> > > } >> > > > > > > ] >> > > > > > > >> > > > > > > 202. The /features path in ZK has a field min_version_level. >> > Which >> > > > API >> > > > > > and >> > > > > > > tool can change that value? >> > > > > > > >> > > > > > > Jun >> > > > > > > >> > > > > > > On Mon, Apr 13, 2020 at 5:12 PM Kowshik Prakasam < >> > > > > kpraka...@confluent.io >> > > > > > > >> > > > > > > wrote: >> > > > > > > >> > > > > > > > Hi Jun, >> > > > > > > > >> > > > > > > > Thanks for the feedback! I have updated the KIP-584 >> addressing >> > > your >> > > > > > > > comments. >> > > > > > > > Please find my response below. >> > > > > > > > >> > > > > > > > > 100.6 You can look for the sentence "This operation >> requires >> > > > ALTER >> > > > > on >> > > > > > > > > CLUSTER." in KIP-455. Also, you can check its usage in >> > > > > > > > > KafkaApis.authorize(). >> > > > > > > > >> > > > > > > > (Kowshik): Done. Great point! For the newly introduced >> > > > > UPDATE_FEATURES >> > > > > > > api, >> > > > > > > > I have added a >> > > > > > > > requirement that AclOperation.ALTER is required on >> > > > > > ResourceType.CLUSTER. >> > > > > > > > >> > > > > > > > > 110. Keeping the feature version as int is probably fine. >> I >> > > just >> > > > > felt >> > > > > > > > that >> > > > > > > > > for some of the common user interactions, it's more >> > convenient >> > > to >> > > > > > > > > relate that to a release version. For example, if a user >> > wants >> > > to >> > > > > > > > downgrade >> > > > > > > > > to a release 2.5, it's easier for the user to use the tool >> > like >> > > > > "tool >> > > > > > > > > --downgrade 2.5" instead of "tool --downgrade --feature X >> > > > --version >> > > > > > 6". >> > > > > > > > >> > > > > > > > (Kowshik): Great point. Generally, maximum feature version >> > levels >> > > > are >> > > > > > not >> > > > > > > > downgradable after >> > > > > > > > they are finalized in the cluster. This is because, as a >> > > guideline >> > > > > > > bumping >> > > > > > > > feature version level usually is used mainly to convey >> > important >> > > > > > breaking >> > > > > > > > changes. >> > > > > > > > Despite the above, there may be some extreme/rare cases >> where a >> > > > user >> > > > > > > wants >> > > > > > > > to downgrade >> > > > > > > > all features to a specific previous release. The user may >> want >> > to >> > > > do >> > > > > > this >> > > > > > > > just >> > > > > > > > prior to rolling back a Kafka cluster to a previous release. >> > > > > > > > >> > > > > > > > To support the above, I have made a change to the KIP >> > explaining >> > > > that >> > > > > > the >> > > > > > > > CLI tool is versioned. >> > > > > > > > The CLI tool internally has knowledge about a map of >> features >> > to >> > > > > their >> > > > > > > > respective max >> > > > > > > > versions supported by the Broker. The tool's knowledge of >> > > features >> > > > > and >> > > > > > > > their version values, >> > > > > > > > is limited to the version of the CLI tool itself i.e. the >> > > > information >> > > > > > is >> > > > > > > > packaged into the CLI tool >> > > > > > > > when it is released. Whenever a Kafka release introduces a >> new >> > > > > feature >> > > > > > > > version, or modifies >> > > > > > > > an existing feature version, the CLI tool shall also be >> updated >> > > > with >> > > > > > this >> > > > > > > > information, >> > > > > > > > Newer versions of the CLI tool will be released as part of >> the >> > > > Kafka >> > > > > > > > releases. >> > > > > > > > >> > > > > > > > Therefore, to achieve the downgrade need, the user just >> needs >> > to >> > > > run >> > > > > > the >> > > > > > > > version of >> > > > > > > > the CLI tool that's part of the particular previous release >> > that >> > > > > he/she >> > > > > > > is >> > > > > > > > downgrading to. >> > > > > > > > To help the user with this, there is a new command added to >> the >> > > CLI >> > > > > > tool >> > > > > > > > called `downgrade-all`. >> > > > > > > > This essentially downgrades max version levels of all >> features >> > in >> > > > the >> > > > > > > > cluster to the versions >> > > > > > > > known to the CLI tool internally. >> > > > > > > > >> > > > > > > > I have explained the above in the KIP under these sections: >> > > > > > > > >> > > > > > > > Tooling support (have explained that the CLI tool is >> > versioned): >> > > > > > > > >> > > > > > > > >> > > > > > > >> > > > > > >> > > > > >> > > > >> > > >> > >> https://cwiki.apache.org/confluence/display/KAFKA/KIP-584%3A+Versioning+scheme+for+features#KIP-584:Versioningschemeforfeatures-Toolingsupport >> > > > > > > > >> > > > > > > > Regular CLI tool usage (please refer to point #3, and see >> the >> > > > tooling >> > > > > > > > example) >> > > > > > > > >> > > > > > > > >> > > > > > > >> > > > > > >> > > > > >> > > > >> > > >> > >> https://cwiki.apache.org/confluence/display/KAFKA/KIP-584%3A+Versioning+scheme+for+features#KIP-584:Versioningschemeforfeatures-RegularCLItoolusage >> > > > > > > > >> > > > > > > > > 110. Similarly, if the client library finds a feature >> > mismatch >> > > > with >> > > > > > the >> > > > > > > > broker, >> > > > > > > > > the client likely needs to log some error message for the >> > user >> > > to >> > > > > > take >> > > > > > > > some >> > > > > > > > > actions. It's much more actionable if the error message is >> > > > "upgrade >> > > > > > the >> > > > > > > > > broker to release version 2.6" than just "upgrade the >> broker >> > to >> > > > > > feature >> > > > > > > > > version 7". >> > > > > > > > >> > > > > > > > (Kowshik): That's a really good point! If we use ints for >> > feature >> > > > > > > versions, >> > > > > > > > the best >> > > > > > > > message that client can print for debugging is "broker >> doesn't >> > > > > support >> > > > > > > > feature version 7", and alongside that print the supported >> > > version >> > > > > > range >> > > > > > > > returned >> > > > > > > > by the broker. Then, does it sound reasonable that the user >> > could >> > > > > then >> > > > > > > > reference >> > > > > > > > Kafka release logs to figure out which version of the broker >> > > > release >> > > > > is >> > > > > > > > required >> > > > > > > > be deployed, to support feature version 7? I couldn't think >> of >> > a >> > > > > better >> > > > > > > > strategy here. >> > > > > > > > >> > > > > > > > > 120. When should a developer bump up the version of a >> > feature? >> > > > > > > > >> > > > > > > > (Kowshik): Great question! In the KIP, I have added a >> section: >> > > > > > > 'Guidelines >> > > > > > > > on feature versions and workflows' >> > > > > > > > providing some guidelines on when to use the versioned >> feature >> > > > flags, >> > > > > > and >> > > > > > > > what >> > > > > > > > are the regular workflows with the CLI tool. >> > > > > > > > >> > > > > > > > Link to the relevant sections: >> > > > > > > > Guidelines: >> > > > > > > > >> > > > > > > > >> > > > > > > >> > > > > > >> > > > > >> > > > >> > > >> > >> https://cwiki.apache.org/confluence/display/KAFKA/KIP-584%3A+Versioning+scheme+for+features#KIP-584:Versioningschemeforfeatures-Guidelinesonfeatureversionsandworkflows >> > > > > > > > >> > > > > > > > Regular CLI tool usage: >> > > > > > > > >> > > > > > > > >> > > > > > > >> > > > > > >> > > > > >> > > > >> > > >> > >> https://cwiki.apache.org/confluence/display/KAFKA/KIP-584%3A+Versioning+scheme+for+features#KIP-584:Versioningschemeforfeatures-RegularCLItoolusage >> > > > > > > > >> > > > > > > > Advanced CLI tool usage: >> > > > > > > > >> > > > > > > > >> > > > > > > >> > > > > > >> > > > > >> > > > >> > > >> > >> https://cwiki.apache.org/confluence/display/KAFKA/KIP-584%3A+Versioning+scheme+for+features#KIP-584:Versioningschemeforfeatures-AdvancedCLItoolusage >> > > > > > > > >> > > > > > > > >> > > > > > > > Cheers, >> > > > > > > > Kowshik >> > > > > > > > >> > > > > > > > >> > > > > > > > On Fri, Apr 10, 2020 at 4:25 PM Jun Rao <j...@confluent.io> >> > > wrote: >> > > > > > > > >> > > > > > > > > Hi, Kowshik, >> > > > > > > > > >> > > > > > > > > Thanks for the reply. A few more comments. >> > > > > > > > > >> > > > > > > > > 110. Keeping the feature version as int is probably fine. >> I >> > > just >> > > > > felt >> > > > > > > > that >> > > > > > > > > for some of the common user interactions, it's more >> > convenient >> > > to >> > > > > > > > > relate that to a release version. For example, if a user >> > wants >> > > to >> > > > > > > > downgrade >> > > > > > > > > to a release 2.5, it's easier for the user to use the tool >> > like >> > > > > "tool >> > > > > > > > > --downgrade 2.5" instead of "tool --downgrade --feature X >> > > > --version >> > > > > > 6". >> > > > > > > > > Similarly, if the client library finds a feature mismatch >> > with >> > > > the >> > > > > > > > broker, >> > > > > > > > > the client likely needs to log some error message for the >> > user >> > > to >> > > > > > take >> > > > > > > > some >> > > > > > > > > actions. It's much more actionable if the error message is >> > > > "upgrade >> > > > > > the >> > > > > > > > > broker to release version 2.6" than just "upgrade the >> broker >> > to >> > > > > > feature >> > > > > > > > > version 7". >> > > > > > > > > >> > > > > > > > > 111. Sounds good. >> > > > > > > > > >> > > > > > > > > 120. When should a developer bump up the version of a >> > feature? >> > > > > > > > > >> > > > > > > > > Jun >> > > > > > > > > >> > > > > > > > > On Tue, Apr 7, 2020 at 12:26 AM Kowshik Prakasam < >> > > > > > > kpraka...@confluent.io >> > > > > > > > > >> > > > > > > > > wrote: >> > > > > > > > > >> > > > > > > > > > Hi Jun, >> > > > > > > > > > >> > > > > > > > > > I have updated the KIP for the item 111. >> > > > > > > > > > I'm in the process of addressing 100.6, and will >> provide an >> > > > > update >> > > > > > > > soon. >> > > > > > > > > > I think item 110 is still under discussion given we are >> now >> > > > > > > providing a >> > > > > > > > > way >> > > > > > > > > > to finalize >> > > > > > > > > > all features to their latest version levels. In any >> case, >> > > > please >> > > > > > let >> > > > > > > us >> > > > > > > > > > know >> > > > > > > > > > how you feel in response to Colin's comments on this >> topic. >> > > > > > > > > > >> > > > > > > > > > > 111. To put this in context, when we had IBP, the >> default >> > > > value >> > > > > > is >> > > > > > > > the >> > > > > > > > > > > current released version. So, if you are a brand new >> > user, >> > > > you >> > > > > > > don't >> > > > > > > > > need >> > > > > > > > > > > to configure IBP and all new features will be >> immediately >> > > > > > available >> > > > > > > > in >> > > > > > > > > > the >> > > > > > > > > > > new cluster. If you are upgrading from an old version, >> > you >> > > do >> > > > > > need >> > > > > > > to >> > > > > > > > > > > understand and configure IBP. I see a similar pattern >> > here >> > > > for >> > > > > > > > > > > features. From the ease of use perspective, ideally, >> we >> > > > > shouldn't >> > > > > > > > > require >> > > > > > > > > > a >> > > > > > > > > > > new user to have an extra step such as running a >> > bootstrap >> > > > > script >> > > > > > > > > unless >> > > > > > > > > > > it's truly necessary. If someone has a special need >> (all >> > > the >> > > > > > cases >> > > > > > > > you >> > > > > > > > > > > mentioned seem special cases?), they can configure a >> mode >> > > > such >> > > > > > that >> > > > > > > > > > > features are enabled/disabled manually. >> > > > > > > > > > >> > > > > > > > > > (Kowshik): That makes sense, thanks for the idea! Sorry >> if >> > I >> > > > > didn't >> > > > > > > > > > understand >> > > > > > > > > > this need earlier. I have updated the KIP with the >> approach >> > > > that >> > > > > > > > whenever >> > > > > > > > > > the '/features' node is absent, the controller by >> default >> > > will >> > > > > > > > bootstrap >> > > > > > > > > > the node >> > > > > > > > > > to contain the latest feature levels. Here is the new >> > section >> > > > in >> > > > > > the >> > > > > > > > KIP >> > > > > > > > > > describing >> > > > > > > > > > the same: >> > > > > > > > > > >> > > > > > > > > > >> > > > > > > > > >> > > > > > > > >> > > > > > > >> > > > > > >> > > > > >> > > > >> > > >> > >> https://cwiki.apache.org/confluence/display/KAFKA/KIP-584%3A+Versioning+scheme+for+features#KIP-584:Versioningschemeforfeatures-Controller:ZKnodebootstrapwithdefaultvalues >> > > > > > > > > > >> > > > > > > > > > Next, as I explained in my response to Colin's >> suggestions, >> > > we >> > > > > are >> > > > > > > now >> > > > > > > > > > providing a `--finalize-latest-features` flag with the >> > > tooling. >> > > > > > This >> > > > > > > > lets >> > > > > > > > > > the sysadmin finalize all features known to the >> controller >> > to >> > > > > their >> > > > > > > > > latest >> > > > > > > > > > version >> > > > > > > > > > levels. Please look at this section (point #3 and the >> > tooling >> > > > > > example >> > > > > > > > > > later): >> > > > > > > > > > >> > > > > > > > > > >> > > > > > > > > >> > > > > > > > >> > > > > > > >> > > > > > >> > > > > >> > > > >> > > >> > >> https://cwiki.apache.org/confluence/display/KAFKA/KIP-584%3A+Versioning+scheme+for+features#KIP-584:Versioningschemeforfeatures-Toolingsupport >> > > > > > > > > > >> > > > > > > > > > >> > > > > > > > > > Do you feel this addresses your comment/concern? >> > > > > > > > > > >> > > > > > > > > > >> > > > > > > > > > Cheers, >> > > > > > > > > > Kowshik >> > > > > > > > > > >> > > > > > > > > > On Mon, Apr 6, 2020 at 12:06 PM Jun Rao < >> j...@confluent.io> >> > > > > wrote: >> > > > > > > > > > >> > > > > > > > > > > Hi, Kowshik, >> > > > > > > > > > > >> > > > > > > > > > > Thanks for the reply. A few more replies below. >> > > > > > > > > > > >> > > > > > > > > > > 100.6 You can look for the sentence "This operation >> > > requires >> > > > > > ALTER >> > > > > > > on >> > > > > > > > > > > CLUSTER." in KIP-455. Also, you can check its usage in >> > > > > > > > > > > KafkaApis.authorize(). >> > > > > > > > > > > >> > > > > > > > > > > 110. From the external client/tooling perspective, >> it's >> > > more >> > > > > > > natural >> > > > > > > > to >> > > > > > > > > > use >> > > > > > > > > > > the release version for features. If we can use the >> same >> > > > > release >> > > > > > > > > version >> > > > > > > > > > > for internal representation, it seems simpler (easier >> to >> > > > > > > understand, >> > > > > > > > no >> > > > > > > > > > > mapping overhead, etc). Is there a benefit with >> separate >> > > > > external >> > > > > > > and >> > > > > > > > > > > internal versioning schemes? >> > > > > > > > > > > >> > > > > > > > > > > 111. To put this in context, when we had IBP, the >> default >> > > > value >> > > > > > is >> > > > > > > > the >> > > > > > > > > > > current released version. So, if you are a brand new >> > user, >> > > > you >> > > > > > > don't >> > > > > > > > > need >> > > > > > > > > > > to configure IBP and all new features will be >> immediately >> > > > > > available >> > > > > > > > in >> > > > > > > > > > the >> > > > > > > > > > > new cluster. If you are upgrading from an old version, >> > you >> > > do >> > > > > > need >> > > > > > > to >> > > > > > > > > > > understand and configure IBP. I see a similar pattern >> > here >> > > > for >> > > > > > > > > > > features. From the ease of use perspective, ideally, >> we >> > > > > shouldn't >> > > > > > > > > > require a >> > > > > > > > > > > new user to have an extra step such as running a >> > bootstrap >> > > > > script >> > > > > > > > > unless >> > > > > > > > > > > it's truly necessary. If someone has a special need >> (all >> > > the >> > > > > > cases >> > > > > > > > you >> > > > > > > > > > > mentioned seem special cases?), they can configure a >> mode >> > > > such >> > > > > > that >> > > > > > > > > > > features are enabled/disabled manually. >> > > > > > > > > > > >> > > > > > > > > > > Jun >> > > > > > > > > > > >> > > > > > > > > > > On Fri, Apr 3, 2020 at 5:54 PM Kowshik Prakasam < >> > > > > > > > > kpraka...@confluent.io> >> > > > > > > > > > > wrote: >> > > > > > > > > > > >> > > > > > > > > > > > Hi Jun, >> > > > > > > > > > > > >> > > > > > > > > > > > Thanks for the feedback and suggestions. Please >> find my >> > > > > > response >> > > > > > > > > below. >> > > > > > > > > > > > >> > > > > > > > > > > > > 100.6 For every new request, the admin needs to >> > control >> > > > who >> > > > > > is >> > > > > > > > > > allowed >> > > > > > > > > > > to >> > > > > > > > > > > > > issue that request if security is enabled. So, we >> > need >> > > to >> > > > > > > assign >> > > > > > > > > the >> > > > > > > > > > > new >> > > > > > > > > > > > > request a ResourceType and possible AclOperations. >> > See >> > > > > > > > > > > > > >> > > > > > > > > > > > >> > > > > > > > > > > > >> > > > > > > > > > > >> > > > > > > > > > >> > > > > > > > > >> > > > > > > > >> > > > > > > >> > > > > > >> > > > > >> > > > >> > > >> > >> https://cwiki.apache.org/confluence/display/KAFKA/KIP-455%3A+Create+an+Administrative+API+for+Replica+Reassignment >> > > > > > > > > > > > > as an example. >> > > > > > > > > > > > >> > > > > > > > > > > > (Kowshik): I don't see any reference to the words >> > > > > ResourceType >> > > > > > or >> > > > > > > > > > > > AclOperations >> > > > > > > > > > > > in the KIP. Please let me know how I can use the KIP >> > that >> > > > you >> > > > > > > > linked >> > > > > > > > > to >> > > > > > > > > > > > know how to >> > > > > > > > > > > > setup the appropriate ResourceType and/or >> > > ClusterOperation? >> > > > > > > > > > > > >> > > > > > > > > > > > > 105. If we change delete to disable, it's better >> to >> > do >> > > > this >> > > > > > > > > > > consistently >> > > > > > > > > > > > in >> > > > > > > > > > > > > request protocol and admin api as well. >> > > > > > > > > > > > >> > > > > > > > > > > > (Kowshik): The API shouldn't be called 'disable' >> when >> > it >> > > is >> > > > > > > > deleting >> > > > > > > > > a >> > > > > > > > > > > > feature. >> > > > > > > > > > > > I've just changed the KIP to use 'delete'. I don't >> > have a >> > > > > > strong >> > > > > > > > > > > > preference. >> > > > > > > > > > > > >> > > > > > > > > > > > > 110. The minVersion/maxVersion for features use >> > int64. >> > > > > > > Currently, >> > > > > > > > > our >> > > > > > > > > > > > > release version schema is major.minor.bugfix (e.g. >> > > > 2.5.0). >> > > > > > It's >> > > > > > > > > > > possible >> > > > > > > > > > > > > for new features to be included in minor releases >> > too. >> > > > > Should >> > > > > > > we >> > > > > > > > > make >> > > > > > > > > > > the >> > > > > > > > > > > > > feature versioning match the release versioning? >> > > > > > > > > > > > >> > > > > > > > > > > > (Kowshik): The release version can be mapped to a >> set >> > of >> > > > > > feature >> > > > > > > > > > > versions, >> > > > > > > > > > > > and this can be done, for example in the tool (or >> even >> > > > > external >> > > > > > > to >> > > > > > > > > the >> > > > > > > > > > > > tool). >> > > > > > > > > > > > Can you please clarify what I'm missing? >> > > > > > > > > > > > >> > > > > > > > > > > > > 111. "During regular operations, the data in the >> ZK >> > > node >> > > > > can >> > > > > > be >> > > > > > > > > > mutated >> > > > > > > > > > > > > only via a specific admin API served only by the >> > > > > > controller." I >> > > > > > > > am >> > > > > > > > > > > > > wondering why can't the controller auto finalize a >> > > > feature >> > > > > > > > version >> > > > > > > > > > > after >> > > > > > > > > > > > > all brokers are upgraded? For new users who >> download >> > > the >> > > > > > latest >> > > > > > > > > > version >> > > > > > > > > > > > to >> > > > > > > > > > > > > build a new cluster, it's inconvenient for them to >> > have >> > > > to >> > > > > > > > manually >> > > > > > > > > > > > enable >> > > > > > > > > > > > > each feature. >> > > > > > > > > > > > >> > > > > > > > > > > > (Kowshik): I agree that there is a trade-off here, >> but >> > it >> > > > > will >> > > > > > > help >> > > > > > > > > > > > to decide whether the automation can be thought >> through >> > > in >> > > > > the >> > > > > > > > future >> > > > > > > > > > > > in a follow up KIP, or right now in this KIP. We may >> > > invest >> > > > > > > > > > > > in automation, but we have to decide whether we >> should >> > do >> > > > it >> > > > > > > > > > > > now or later. >> > > > > > > > > > > > >> > > > > > > > > > > > For the inconvenience that you mentioned, do you >> think >> > > the >> > > > > > > problem >> > > > > > > > > that >> > > > > > > > > > > you >> > > > > > > > > > > > mentioned can be overcome by asking for the cluster >> > > > operator >> > > > > > to >> > > > > > > > run >> > > > > > > > > a >> > > > > > > > > > > > bootstrap script when he/she knows that a specific >> AK >> > > > > release >> > > > > > > has >> > > > > > > > > been >> > > > > > > > > > > > almost completely deployed in a cluster for the >> first >> > > time? >> > > > > > Idea >> > > > > > > is >> > > > > > > > > > that >> > > > > > > > > > > > the >> > > > > > > > > > > > bootstrap script will know how to map a specific AK >> > > release >> > > > > to >> > > > > > > > > > finalized >> > > > > > > > > > > > feature versions, and run the `kafka-features.sh` >> tool >> > > > > > > > appropriately >> > > > > > > > > > > > against >> > > > > > > > > > > > the cluster. >> > > > > > > > > > > > >> > > > > > > > > > > > Now, coming back to your automation >> proposal/question. >> > > > > > > > > > > > I do see the value of automated feature version >> > > > finalization, >> > > > > > > but I >> > > > > > > > > > also >> > > > > > > > > > > > see >> > > > > > > > > > > > that this will open up several questions and some >> > risks, >> > > as >> > > > > > > > explained >> > > > > > > > > > > > below. >> > > > > > > > > > > > The answers to these depend on the definition of the >> > > > > automation >> > > > > > > we >> > > > > > > > > > choose >> > > > > > > > > > > > to build, and how well does it fit into a kafka >> > > deployment. >> > > > > > > > > > > > Basically, it can be unsafe for the controller to >> > > finalize >> > > > > > > feature >> > > > > > > > > > > version >> > > > > > > > > > > > upgrades automatically, without learning about the >> > intent >> > > > of >> > > > > > the >> > > > > > > > > > cluster >> > > > > > > > > > > > operator. >> > > > > > > > > > > > 1. We would sometimes want to lock feature versions >> > only >> > > > when >> > > > > > we >> > > > > > > > have >> > > > > > > > > > > > externally verified >> > > > > > > > > > > > the stability of the broker binary. >> > > > > > > > > > > > 2. Sometimes only the cluster operator knows that a >> > > cluster >> > > > > > > upgrade >> > > > > > > > > is >> > > > > > > > > > > > complete, >> > > > > > > > > > > > and new brokers are highly unlikely to join the >> > cluster. >> > > > > > > > > > > > 3. Only the cluster operator knows that the intent >> is >> > to >> > > > > deploy >> > > > > > > the >> > > > > > > > > > same >> > > > > > > > > > > > version >> > > > > > > > > > > > of the new broker release across the entire cluster >> > (i.e. >> > > > the >> > > > > > > > latest >> > > > > > > > > > > > downloaded version). >> > > > > > > > > > > > 4. For downgrades, it appears the controller still >> > needs >> > > > some >> > > > > > > > > external >> > > > > > > > > > > > input >> > > > > > > > > > > > (such as the proposed tool) to finalize a feature >> > version >> > > > > > > > downgrade. >> > > > > > > > > > > > >> > > > > > > > > > > > If we have automation, that automation can end up >> > failing >> > > > in >> > > > > > some >> > > > > > > > of >> > > > > > > > > > the >> > > > > > > > > > > > cases >> > > > > > > > > > > > above. Then, we need a way to declare that the >> cluster >> > is >> > > > > "not >> > > > > > > > ready" >> > > > > > > > > > if >> > > > > > > > > > > > the >> > > > > > > > > > > > controller cannot automatically finalize some basic >> > > > required >> > > > > > > > feature >> > > > > > > > > > > > version >> > > > > > > > > > > > upgrades across the cluster. We need to make the >> > cluster >> > > > > > operator >> > > > > > > > > aware >> > > > > > > > > > > in >> > > > > > > > > > > > such a scenario (raise an alert or alike). >> > > > > > > > > > > > >> > > > > > > > > > > > > 112. DeleteFeaturesResponse: It seems the apiKey >> > should >> > > > be >> > > > > 49 >> > > > > > > > > instead >> > > > > > > > > > > of >> > > > > > > > > > > > 48. >> > > > > > > > > > > > >> > > > > > > > > > > > (Kowshik): Done. >> > > > > > > > > > > > >> > > > > > > > > > > > >> > > > > > > > > > > > Cheers, >> > > > > > > > > > > > Kowshik >> > > > > > > > > > > > >> > > > > > > > > > > > On Fri, Apr 3, 2020 at 11:24 AM Jun Rao < >> > > j...@confluent.io> >> > > > > > > wrote: >> > > > > > > > > > > > >> > > > > > > > > > > > > Hi, Kowshik, >> > > > > > > > > > > > > >> > > > > > > > > > > > > Thanks for the reply. A few more comments below. >> > > > > > > > > > > > > >> > > > > > > > > > > > > 100.6 For every new request, the admin needs to >> > control >> > > > who >> > > > > > is >> > > > > > > > > > allowed >> > > > > > > > > > > to >> > > > > > > > > > > > > issue that request if security is enabled. So, we >> > need >> > > to >> > > > > > > assign >> > > > > > > > > the >> > > > > > > > > > > new >> > > > > > > > > > > > > request a ResourceType and possible AclOperations. >> > See >> > > > > > > > > > > > > >> > > > > > > > > > > > > >> > > > > > > > > > > > >> > > > > > > > > > > >> > > > > > > > > > >> > > > > > > > > >> > > > > > > > >> > > > > > > >> > > > > > >> > > > > >> > > > >> > > >> > >> https://cwiki.apache.org/confluence/display/KAFKA/KIP-455%3A+Create+an+Administrative+API+for+Replica+Reassignment >> > > > > > > > > > > > > as >> > > > > > > > > > > > > an example. >> > > > > > > > > > > > > >> > > > > > > > > > > > > 105. If we change delete to disable, it's better >> to >> > do >> > > > this >> > > > > > > > > > > consistently >> > > > > > > > > > > > in >> > > > > > > > > > > > > request protocol and admin api as well. >> > > > > > > > > > > > > >> > > > > > > > > > > > > 110. The minVersion/maxVersion for features use >> > int64. >> > > > > > > Currently, >> > > > > > > > > our >> > > > > > > > > > > > > release version schema is major.minor.bugfix (e.g. >> > > > 2.5.0). >> > > > > > It's >> > > > > > > > > > > possible >> > > > > > > > > > > > > for new features to be included in minor releases >> > too. >> > > > > Should >> > > > > > > we >> > > > > > > > > make >> > > > > > > > > > > the >> > > > > > > > > > > > > feature versioning match the release versioning? >> > > > > > > > > > > > > >> > > > > > > > > > > > > 111. "During regular operations, the data in the >> ZK >> > > node >> > > > > can >> > > > > > be >> > > > > > > > > > mutated >> > > > > > > > > > > > > only via a specific admin API served only by the >> > > > > > controller." I >> > > > > > > > am >> > > > > > > > > > > > > wondering why can't the controller auto finalize a >> > > > feature >> > > > > > > > version >> > > > > > > > > > > after >> > > > > > > > > > > > > all brokers are upgraded? For new users who >> download >> > > the >> > > > > > latest >> > > > > > > > > > version >> > > > > > > > > > > > to >> > > > > > > > > > > > > build a new cluster, it's inconvenient for them to >> > have >> > > > to >> > > > > > > > manually >> > > > > > > > > > > > enable >> > > > > > > > > > > > > each feature. >> > > > > > > > > > > > > >> > > > > > > > > > > > > 112. DeleteFeaturesResponse: It seems the apiKey >> > should >> > > > be >> > > > > 49 >> > > > > > > > > instead >> > > > > > > > > > > of >> > > > > > > > > > > > > 48. >> > > > > > > > > > > > > >> > > > > > > > > > > > > Jun >> > > > > > > > > > > > > >> > > > > > > > > > > > > >> > > > > > > > > > > > > On Fri, Apr 3, 2020 at 1:27 AM Kowshik Prakasam < >> > > > > > > > > > > kpraka...@confluent.io> >> > > > > > > > > > > > > wrote: >> > > > > > > > > > > > > >> > > > > > > > > > > > > > Hey Jun, >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > Thanks a lot for the great feedback! Please note >> > that >> > > > the >> > > > > > > > design >> > > > > > > > > > > > > > has changed a little bit on the KIP, and we now >> > > > propagate >> > > > > > the >> > > > > > > > > > > finalized >> > > > > > > > > > > > > > features metadata only via ZK watches (instead >> of >> > > > > > > > > > > UpdateMetadataRequest >> > > > > > > > > > > > > > from the controller). >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > Please find below my response to your >> > > > questions/feedback, >> > > > > > > with >> > > > > > > > > the >> > > > > > > > > > > > prefix >> > > > > > > > > > > > > > "(Kowshik):". >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > > 100. >> UpdateFeaturesRequest/UpdateFeaturesResponse >> > > > > > > > > > > > > > > 100.1 Since this request waits for responses >> from >> > > > > > brokers, >> > > > > > > > > should >> > > > > > > > > > > we >> > > > > > > > > > > > > add >> > > > > > > > > > > > > > a >> > > > > > > > > > > > > > > timeout in the request (like >> createTopicRequest)? >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > (Kowshik): Great point! Done. I have added a >> > timeout >> > > > > field. >> > > > > > > > Note: >> > > > > > > > > > we >> > > > > > > > > > > no >> > > > > > > > > > > > > > longer >> > > > > > > > > > > > > > wait for responses from brokers, since the >> design >> > has >> > > > > been >> > > > > > > > > changed >> > > > > > > > > > so >> > > > > > > > > > > > > that >> > > > > > > > > > > > > > the >> > > > > > > > > > > > > > features information is propagated via ZK. >> > > > Nevertheless, >> > > > > it >> > > > > > > is >> > > > > > > > > > right >> > > > > > > > > > > to >> > > > > > > > > > > > > > have a timeout >> > > > > > > > > > > > > > for the request. >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > > 100.2 The response schema is a bit weird. >> > > Typically, >> > > > > the >> > > > > > > > > response >> > > > > > > > > > > > just >> > > > > > > > > > > > > > > shows an error code and an error message, >> instead >> > > of >> > > > > > > echoing >> > > > > > > > > the >> > > > > > > > > > > > > request. >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > (Kowshik): Great point! Yeah, I have modified >> it to >> > > > just >> > > > > > > return >> > > > > > > > > an >> > > > > > > > > > > > error >> > > > > > > > > > > > > > code and a message. >> > > > > > > > > > > > > > Previously it was not echoing the "request", >> rather >> > > it >> > > > > was >> > > > > > > > > > returning >> > > > > > > > > > > > the >> > > > > > > > > > > > > > latest set of >> > > > > > > > > > > > > > cluster-wide finalized features (after applying >> the >> > > > > > updates). >> > > > > > > > But >> > > > > > > > > > you >> > > > > > > > > > > > are >> > > > > > > > > > > > > > right, >> > > > > > > > > > > > > > the additional info is not required, so I have >> > > removed >> > > > it >> > > > > > > from >> > > > > > > > > the >> > > > > > > > > > > > > response >> > > > > > > > > > > > > > schema. >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > > 100.3 Should we add a separate request to >> > > > list/describe >> > > > > > the >> > > > > > > > > > > existing >> > > > > > > > > > > > > > > features? >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > (Kowshik): This is already present in the KIP >> via >> > the >> > > > > > > > > > > > 'DescribeFeatures' >> > > > > > > > > > > > > > Admin API, >> > > > > > > > > > > > > > which, underneath covers uses the >> > ApiVersionsRequest >> > > to >> > > > > > > > > > list/describe >> > > > > > > > > > > > the >> > > > > > > > > > > > > > existing features. Please read the 'Tooling >> > support' >> > > > > > section. >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > > 100.4 We are mixing ADD_OR_UPDATE and DELETE >> in a >> > > > > single >> > > > > > > > > request. >> > > > > > > > > > > For >> > > > > > > > > > > > > > > DELETE, the version field doesn't make sense. >> > So, I >> > > > > guess >> > > > > > > the >> > > > > > > > > > > broker >> > > > > > > > > > > > > just >> > > > > > > > > > > > > > > ignores this? An alternative way is to have a >> > > > separate >> > > > > > > > > > > > > > DeleteFeaturesRequest >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > (Kowshik): Great point! I have modified the KIP >> now >> > > to >> > > > > > have 2 >> > > > > > > > > > > separate >> > > > > > > > > > > > > > controller APIs >> > > > > > > > > > > > > > serving these different purposes: >> > > > > > > > > > > > > > 1. updateFeatures >> > > > > > > > > > > > > > 2. deleteFeatures >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > > 100.5 In UpdateFeaturesResponse, we have "The >> > > > > > monotonically >> > > > > > > > > > > > increasing >> > > > > > > > > > > > > > > version of the metadata for finalized >> features." >> > I >> > > am >> > > > > > > > wondering >> > > > > > > > > > why >> > > > > > > > > > > > the >> > > > > > > > > > > > > > > ordering is important? >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > (Kowshik): In the latest KIP write-up, it is >> called >> > > > epoch >> > > > > > > > > (instead >> > > > > > > > > > of >> > > > > > > > > > > > > > version), and >> > > > > > > > > > > > > > it is just the ZK node version. Basically, this >> is >> > > the >> > > > > > epoch >> > > > > > > > for >> > > > > > > > > > the >> > > > > > > > > > > > > > cluster-wide >> > > > > > > > > > > > > > finalized feature version metadata. This >> metadata >> > is >> > > > > served >> > > > > > > to >> > > > > > > > > > > clients >> > > > > > > > > > > > > via >> > > > > > > > > > > > > > the >> > > > > > > > > > > > > > ApiVersionsResponse (for reads). We propagate >> > updates >> > > > > from >> > > > > > > the >> > > > > > > > > > > > > '/features' >> > > > > > > > > > > > > > ZK node >> > > > > > > > > > > > > > to all brokers, via ZK watches setup by each >> broker >> > > on >> > > > > the >> > > > > > > > > > > '/features' >> > > > > > > > > > > > > > node. >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > Now here is why the ordering is important: >> > > > > > > > > > > > > > ZK watches don't propagate at the same time. As >> a >> > > > result, >> > > > > > the >> > > > > > > > > > > > > > ApiVersionsResponse >> > > > > > > > > > > > > > is eventually consistent across brokers. This >> can >> > > > > introduce >> > > > > > > > cases >> > > > > > > > > > > > > > where clients see an older lower epoch of the >> > > features >> > > > > > > > metadata, >> > > > > > > > > > > after >> > > > > > > > > > > > a >> > > > > > > > > > > > > > more recent >> > > > > > > > > > > > > > higher epoch was returned at a previous point in >> > > time. >> > > > We >> > > > > > > > expect >> > > > > > > > > > > > clients >> > > > > > > > > > > > > > to always employ the rule that the latest >> received >> > > > higher >> > > > > > > epoch >> > > > > > > > > of >> > > > > > > > > > > > > metadata >> > > > > > > > > > > > > > always trumps an older smaller epoch. Those >> clients >> > > > that >> > > > > > are >> > > > > > > > > > external >> > > > > > > > > > > > to >> > > > > > > > > > > > > > Kafka should strongly consider discovering the >> > latest >> > > > > > > metadata >> > > > > > > > > once >> > > > > > > > > > > > > during >> > > > > > > > > > > > > > startup from the brokers, and if required >> refresh >> > the >> > > > > > > metadata >> > > > > > > > > > > > > periodically >> > > > > > > > > > > > > > (to get the latest metadata). >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > > 100.6 Could you specify the required ACL for >> this >> > > new >> > > > > > > > request? >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > (Kowshik): What is ACL, and how could I find out >> > > which >> > > > > one >> > > > > > to >> > > > > > > > > > > specify? >> > > > > > > > > > > > > > Please could you provide me some pointers? I'll >> be >> > > glad >> > > > > to >> > > > > > > > update >> > > > > > > > > > the >> > > > > > > > > > > > > > KIP once I know the next steps. >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > > 101. For the broker registration ZK node, >> should >> > we >> > > > > bump >> > > > > > up >> > > > > > > > the >> > > > > > > > > > > > version >> > > > > > > > > > > > > > in >> > > > > > > > > > > > > > the json? >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > (Kowshik): Great point! Done. I've increased the >> > > > version >> > > > > in >> > > > > > > the >> > > > > > > > > > > broker >> > > > > > > > > > > > > json >> > > > > > > > > > > > > > by 1. >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > > 102. For the /features ZK node, not sure if we >> > need >> > > > the >> > > > > > > epoch >> > > > > > > > > > > field. >> > > > > > > > > > > > > Each >> > > > > > > > > > > > > > > ZK node has an internal version field that is >> > > > > incremented >> > > > > > > on >> > > > > > > > > > every >> > > > > > > > > > > > > > update. >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > (Kowshik): Great point! Done. I'm using the ZK >> node >> > > > > version >> > > > > > > > now, >> > > > > > > > > > > > instead >> > > > > > > > > > > > > of >> > > > > > > > > > > > > > explicitly >> > > > > > > > > > > > > > incremented epoch. >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > > 103. "Enabling the actual semantics of a >> feature >> > > > > version >> > > > > > > > > > > cluster-wide >> > > > > > > > > > > > > is >> > > > > > > > > > > > > > > left to the discretion of the logic >> implementing >> > > the >> > > > > > > feature >> > > > > > > > > (ex: >> > > > > > > > > > > can >> > > > > > > > > > > > > be >> > > > > > > > > > > > > > > done via dynamic broker config)." Does that >> mean >> > > the >> > > > > > broker >> > > > > > > > > > > > > registration >> > > > > > > > > > > > > > ZK >> > > > > > > > > > > > > > > node will be updated dynamically when this >> > happens? >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > (Kowshik): Not really. The text was just >> conveying >> > > > that a >> > > > > > > > broker >> > > > > > > > > > > could >> > > > > > > > > > > > > > "know" of >> > > > > > > > > > > > > > a new feature version, but it does not mean the >> > > broker >> > > > > > should >> > > > > > > > > have >> > > > > > > > > > > also >> > > > > > > > > > > > > > activated the effects of the feature version. >> > Knowing >> > > > vs >> > > > > > > > > activation >> > > > > > > > > > > > are 2 >> > > > > > > > > > > > > > separate things, >> > > > > > > > > > > > > > and the latter can be achieved by dynamic >> config. I >> > > > have >> > > > > > > > reworded >> > > > > > > > > > the >> > > > > > > > > > > > > text >> > > > > > > > > > > > > > to >> > > > > > > > > > > > > > make this clear to the reader. >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > > 104. UpdateMetadataRequest >> > > > > > > > > > > > > > > 104.1 It would be useful to describe when the >> > > feature >> > > > > > > > metadata >> > > > > > > > > is >> > > > > > > > > > > > > > included >> > > > > > > > > > > > > > > in the request. My understanding is that it's >> > only >> > > > > > included >> > > > > > > > if >> > > > > > > > > > (1) >> > > > > > > > > > > > > there >> > > > > > > > > > > > > > is >> > > > > > > > > > > > > > > a change to the finalized feature; (2) broker >> > > > restart; >> > > > > > (3) >> > > > > > > > > > > controller >> > > > > > > > > > > > > > > failover. >> > > > > > > > > > > > > > > 104.2 The new fields have the following >> versions. >> > > Why >> > > > > are >> > > > > > > the >> > > > > > > > > > > > versions >> > > > > > > > > > > > > 3+ >> > > > > > > > > > > > > > > when the top version is bumped to 6? >> > > > > > > > > > > > > > > "fields": [ >> > > > > > > > > > > > > > > {"name": "Name", "type": "string", >> > > > "versions": >> > > > > > > > "3+", >> > > > > > > > > > > > > > > "about": "The name of the >> feature."}, >> > > > > > > > > > > > > > > {"name": "Version", "type": "int64", >> > > > > > "versions": >> > > > > > > > > "3+", >> > > > > > > > > > > > > > > "about": "The finalized version for >> the >> > > > > > > feature."} >> > > > > > > > > > > > > > > ] >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > (Kowshik): With the new improved design, we have >> > > > > completely >> > > > > > > > > > > eliminated >> > > > > > > > > > > > > the >> > > > > > > > > > > > > > need to >> > > > > > > > > > > > > > use UpdateMetadataRequest. This is because we >> now >> > > rely >> > > > on >> > > > > > ZK >> > > > > > > to >> > > > > > > > > > > deliver >> > > > > > > > > > > > > the >> > > > > > > > > > > > > > notifications for changes to the '/features' ZK >> > node. >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > > 105. kafka-features.sh: Instead of using >> > > > update/delete, >> > > > > > > > perhaps >> > > > > > > > > > > it's >> > > > > > > > > > > > > > better >> > > > > > > > > > > > > > > to use enable/disable? >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > (Kowshik): For delete, yes, I have changed it so >> > that >> > > > we >> > > > > > > > instead >> > > > > > > > > > call >> > > > > > > > > > > > it >> > > > > > > > > > > > > > 'disable'. >> > > > > > > > > > > > > > However for 'update', it can now also refer to >> > either >> > > > an >> > > > > > > > upgrade >> > > > > > > > > > or a >> > > > > > > > > > > > > > forced downgrade. >> > > > > > > > > > > > > > Therefore, I have left it the way it is, just >> > calling >> > > > it >> > > > > as >> > > > > > > > just >> > > > > > > > > > > > > 'update'. >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > Cheers, >> > > > > > > > > > > > > > Kowshik >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > On Tue, Mar 31, 2020 at 6:51 PM Jun Rao < >> > > > > j...@confluent.io> >> > > > > > > > > wrote: >> > > > > > > > > > > > > > >> > > > > > > > > > > > > > > Hi, Kowshik, >> > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > Thanks for the KIP. Looks good overall. A few >> > > > comments >> > > > > > > below. >> > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > 100. >> UpdateFeaturesRequest/UpdateFeaturesResponse >> > > > > > > > > > > > > > > 100.1 Since this request waits for responses >> from >> > > > > > brokers, >> > > > > > > > > should >> > > > > > > > > > > we >> > > > > > > > > > > > > add >> > > > > > > > > > > > > > a >> > > > > > > > > > > > > > > timeout in the request (like >> createTopicRequest)? >> > > > > > > > > > > > > > > 100.2 The response schema is a bit weird. >> > > Typically, >> > > > > the >> > > > > > > > > response >> > > > > > > > > > > > just >> > > > > > > > > > > > > > > shows an error code and an error message, >> instead >> > > of >> > > > > > > echoing >> > > > > > > > > the >> > > > > > > > > > > > > request. >> > > > > > > > > > > > > > > 100.3 Should we add a separate request to >> > > > list/describe >> > > > > > the >> > > > > > > > > > > existing >> > > > > > > > > > > > > > > features? >> > > > > > > > > > > > > > > 100.4 We are mixing ADD_OR_UPDATE and DELETE >> in a >> > > > > single >> > > > > > > > > request. >> > > > > > > > > > > For >> > > > > > > > > > > > > > > DELETE, the version field doesn't make sense. >> > So, I >> > > > > guess >> > > > > > > the >> > > > > > > > > > > broker >> > > > > > > > > > > > > just >> > > > > > > > > > > > > > > ignores this? An alternative way is to have a >> > > > separate >> > > > > > > > > > > > > > > DeleteFeaturesRequest >> > > > > > > > > > > > > > > 100.5 In UpdateFeaturesResponse, we have "The >> > > > > > monotonically >> > > > > > > > > > > > increasing >> > > > > > > > > > > > > > > version of the metadata for finalized >> features." >> > I >> > > am >> > > > > > > > wondering >> > > > > > > > > > why >> > > > > > > > > > > > the >> > > > > > > > > > > > > > > ordering is important? >> > > > > > > > > > > > > > > 100.6 Could you specify the required ACL for >> this >> > > new >> > > > > > > > request? >> > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > 101. For the broker registration ZK node, >> should >> > we >> > > > > bump >> > > > > > up >> > > > > > > > the >> > > > > > > > > > > > version >> > > > > > > > > > > > > > in >> > > > > > > > > > > > > > > the json? >> > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > 102. For the /features ZK node, not sure if we >> > need >> > > > the >> > > > > > > epoch >> > > > > > > > > > > field. >> > > > > > > > > > > > > Each >> > > > > > > > > > > > > > > ZK node has an internal version field that is >> > > > > incremented >> > > > > > > on >> > > > > > > > > > every >> > > > > > > > > > > > > > update. >> > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > 103. "Enabling the actual semantics of a >> feature >> > > > > version >> > > > > > > > > > > cluster-wide >> > > > > > > > > > > > > is >> > > > > > > > > > > > > > > left to the discretion of the logic >> implementing >> > > the >> > > > > > > feature >> > > > > > > > > (ex: >> > > > > > > > > > > can >> > > > > > > > > > > > > be >> > > > > > > > > > > > > > > done via dynamic broker config)." Does that >> mean >> > > the >> > > > > > broker >> > > > > > > > > > > > > registration >> > > > > > > > > > > > > > ZK >> > > > > > > > > > > > > > > node will be updated dynamically when this >> > happens? >> > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > 104. UpdateMetadataRequest >> > > > > > > > > > > > > > > 104.1 It would be useful to describe when the >> > > feature >> > > > > > > > metadata >> > > > > > > > > is >> > > > > > > > > > > > > > included >> > > > > > > > > > > > > > > in the request. My understanding is that it's >> > only >> > > > > > included >> > > > > > > > if >> > > > > > > > > > (1) >> > > > > > > > > > > > > there >> > > > > > > > > > > > > > is >> > > > > > > > > > > > > > > a change to the finalized feature; (2) broker >> > > > restart; >> > > > > > (3) >> > > > > > > > > > > controller >> > > > > > > > > > > > > > > failover. >> > > > > > > > > > > > > > > 104.2 The new fields have the following >> versions. >> > > Why >> > > > > are >> > > > > > > the >> > > > > > > > > > > > versions >> > > > > > > > > > > > > 3+ >> > > > > > > > > > > > > > > when the top version is bumped to 6? >> > > > > > > > > > > > > > > "fields": [ >> > > > > > > > > > > > > > > {"name": "Name", "type": "string", >> > > > "versions": >> > > > > > > > "3+", >> > > > > > > > > > > > > > > "about": "The name of the >> feature."}, >> > > > > > > > > > > > > > > {"name": "Version", "type": "int64", >> > > > > > "versions": >> > > > > > > > > "3+", >> > > > > > > > > > > > > > > "about": "The finalized version for >> the >> > > > > > > feature."} >> > > > > > > > > > > > > > > ] >> > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > 105. kafka-features.sh: Instead of using >> > > > update/delete, >> > > > > > > > perhaps >> > > > > > > > > > > it's >> > > > > > > > > > > > > > better >> > > > > > > > > > > > > > > to use enable/disable? >> > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > Jun >> > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > On Tue, Mar 31, 2020 at 5:29 PM Kowshik >> Prakasam >> > < >> > > > > > > > > > > > > kpraka...@confluent.io >> > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > wrote: >> > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > Hey Boyang, >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > Thanks for the great feedback! I have >> updated >> > the >> > > > KIP >> > > > > > > based >> > > > > > > > > on >> > > > > > > > > > > your >> > > > > > > > > > > > > > > > feedback. >> > > > > > > > > > > > > > > > Please find my response below for your >> > comments, >> > > > look >> > > > > > for >> > > > > > > > > > > sentences >> > > > > > > > > > > > > > > > starting >> > > > > > > > > > > > > > > > with "(Kowshik)" below. >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > 1. "When is it safe for the brokers to >> begin >> > > > > handling >> > > > > > > EOS >> > > > > > > > > > > > traffic" >> > > > > > > > > > > > > > > could >> > > > > > > > > > > > > > > > be >> > > > > > > > > > > > > > > > > converted as "When is it safe for the >> brokers >> > > to >> > > > > > start >> > > > > > > > > > serving >> > > > > > > > > > > > new >> > > > > > > > > > > > > > > > > Exactly-Once(EOS) semantics" since EOS is >> not >> > > > > > explained >> > > > > > > > > > earlier >> > > > > > > > > > > > in >> > > > > > > > > > > > > > the >> > > > > > > > > > > > > > > > > context. >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > (Kowshik): Great point! Done. >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > 2. In the *Explanation *section, the >> metadata >> > > > > version >> > > > > > > > > number >> > > > > > > > > > > part >> > > > > > > > > > > > > > > seems a >> > > > > > > > > > > > > > > > > bit blurred. Could you point a reference >> to >> > > later >> > > > > > > section >> > > > > > > > > > that >> > > > > > > > > > > we >> > > > > > > > > > > > > > going >> > > > > > > > > > > > > > > > to >> > > > > > > > > > > > > > > > > store it in Zookeeper and update it every >> > time >> > > > when >> > > > > > > there >> > > > > > > > > is >> > > > > > > > > > a >> > > > > > > > > > > > > > feature >> > > > > > > > > > > > > > > > > change? >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > (Kowshik): Great point! Done. I've added a >> > > > reference >> > > > > in >> > > > > > > the >> > > > > > > > > > KIP. >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > 3. For the feature downgrade, although >> it's a >> > > > > > Non-goal >> > > > > > > of >> > > > > > > > > the >> > > > > > > > > > > > KIP, >> > > > > > > > > > > > > > for >> > > > > > > > > > > > > > > > > features such as group coordinator >> semantics, >> > > > there >> > > > > > is >> > > > > > > no >> > > > > > > > > > legal >> > > > > > > > > > > > > > > scenario >> > > > > > > > > > > > > > > > to >> > > > > > > > > > > > > > > > > perform a downgrade at all. So having >> > downgrade >> > > > > door >> > > > > > > open >> > > > > > > > > is >> > > > > > > > > > > > pretty >> > > > > > > > > > > > > > > > > error-prone as human faults happen all the >> > > time. >> > > > > I'm >> > > > > > > > > assuming >> > > > > > > > > > > as >> > > > > > > > > > > > > new >> > > > > > > > > > > > > > > > > features are implemented, it's not very >> hard >> > to >> > > > > add a >> > > > > > > > flag >> > > > > > > > > > > during >> > > > > > > > > > > > > > > feature >> > > > > > > > > > > > > > > > > creation to indicate whether this feature >> is >> > > > > > > > > "downgradable". >> > > > > > > > > > > > Could >> > > > > > > > > > > > > > you >> > > > > > > > > > > > > > > > > explain a bit more on the extra >> engineering >> > > > effort >> > > > > > for >> > > > > > > > > > shipping >> > > > > > > > > > > > > this >> > > > > > > > > > > > > > > KIP >> > > > > > > > > > > > > > > > > with downgrade protection in place? >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > (Kowshik): Great point! I'd agree and >> disagree >> > > > here. >> > > > > > > While >> > > > > > > > I >> > > > > > > > > > > agree >> > > > > > > > > > > > > that >> > > > > > > > > > > > > > > > accidental >> > > > > > > > > > > > > > > > downgrades can cause problems, I also think >> > > > sometimes >> > > > > > > > > > downgrades >> > > > > > > > > > > > > should >> > > > > > > > > > > > > > > > be allowed for emergency reasons (not all >> > > > downgrades >> > > > > > > cause >> > > > > > > > > > > issues). >> > > > > > > > > > > > > > > > It is just subjective to the feature being >> > > > > downgraded. >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > To be more strict about feature version >> > > > downgrades, I >> > > > > > > have >> > > > > > > > > > > modified >> > > > > > > > > > > > > the >> > > > > > > > > > > > > > > KIP >> > > > > > > > > > > > > > > > proposing that we mandate a >> `--force-downgrade` >> > > > flag >> > > > > be >> > > > > > > > used >> > > > > > > > > in >> > > > > > > > > > > the >> > > > > > > > > > > > > > > > UPDATE_FEATURES api >> > > > > > > > > > > > > > > > and the tooling, whenever the human is >> > > downgrading >> > > > a >> > > > > > > > > finalized >> > > > > > > > > > > > > feature >> > > > > > > > > > > > > > > > version. >> > > > > > > > > > > > > > > > Hopefully this should cover the requirement, >> > > until >> > > > we >> > > > > > > find >> > > > > > > > > the >> > > > > > > > > > > need >> > > > > > > > > > > > > for >> > > > > > > > > > > > > > > > advanced downgrade support. >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > 4. "Each broker’s supported dictionary of >> > > feature >> > > > > > > > versions >> > > > > > > > > > will >> > > > > > > > > > > > be >> > > > > > > > > > > > > > > > defined >> > > > > > > > > > > > > > > > > in the broker code." So this means in >> order >> > to >> > > > > > > restrict a >> > > > > > > > > > > certain >> > > > > > > > > > > > > > > > feature, >> > > > > > > > > > > > > > > > > we need to start the broker first and then >> > > send a >> > > > > > > feature >> > > > > > > > > > > gating >> > > > > > > > > > > > > > > request >> > > > > > > > > > > > > > > > > immediately, which introduces a time gap >> and >> > > the >> > > > > > > > > > > > intended-to-close >> > > > > > > > > > > > > > > > feature >> > > > > > > > > > > > > > > > > could actually serve request during this >> > phase. >> > > > Do >> > > > > > you >> > > > > > > > > think >> > > > > > > > > > we >> > > > > > > > > > > > > > should >> > > > > > > > > > > > > > > > also >> > > > > > > > > > > > > > > > > support configurations as well so that >> admin >> > > user >> > > > > > could >> > > > > > > > > > freely >> > > > > > > > > > > > roll >> > > > > > > > > > > > > > up >> > > > > > > > > > > > > > > a >> > > > > > > > > > > > > > > > > cluster with all nodes complying the same >> > > feature >> > > > > > > gating, >> > > > > > > > > > > without >> > > > > > > > > > > > > > > > worrying >> > > > > > > > > > > > > > > > > about the turnaround time to propagate the >> > > > message >> > > > > > only >> > > > > > > > > after >> > > > > > > > > > > the >> > > > > > > > > > > > > > > cluster >> > > > > > > > > > > > > > > > > starts up? >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > (Kowshik): This is a great point/question. >> One >> > of >> > > > the >> > > > > > > > > > > expectations >> > > > > > > > > > > > > out >> > > > > > > > > > > > > > of >> > > > > > > > > > > > > > > > this KIP, which is >> > > > > > > > > > > > > > > > already followed in the broker, is the >> > following. >> > > > > > > > > > > > > > > > - Imagine at time T1 the broker starts up >> and >> > > > > > registers >> > > > > > > > it’s >> > > > > > > > > > > > > presence >> > > > > > > > > > > > > > in >> > > > > > > > > > > > > > > > ZK, >> > > > > > > > > > > > > > > > along with advertising it’s supported >> > > features. >> > > > > > > > > > > > > > > > - Imagine at a future time T2 the broker >> > > receives >> > > > > the >> > > > > > > > > > > > > > > > UpdateMetadataRequest >> > > > > > > > > > > > > > > > from the controller, which contains the >> > latest >> > > > > > > finalized >> > > > > > > > > > > > features >> > > > > > > > > > > > > as >> > > > > > > > > > > > > > > > seen by >> > > > > > > > > > > > > > > > the controller. The broker validates this >> > data >> > > > > > against >> > > > > > > > > it’s >> > > > > > > > > > > > > > supported >> > > > > > > > > > > > > > > > features to >> > > > > > > > > > > > > > > > make sure there is no mismatch (it will >> > > shutdown >> > > > > if >> > > > > > > > there >> > > > > > > > > is >> > > > > > > > > > > an >> > > > > > > > > > > > > > > > incompatibility). >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > It is expected that during the time between >> > the 2 >> > > > > > events >> > > > > > > T1 >> > > > > > > > > and >> > > > > > > > > > > T2, >> > > > > > > > > > > > > the >> > > > > > > > > > > > > > > > broker is >> > > > > > > > > > > > > > > > almost a silent entity in the cluster. It >> does >> > > not >> > > > > add >> > > > > > > any >> > > > > > > > > > value >> > > > > > > > > > > to >> > > > > > > > > > > > > the >> > > > > > > > > > > > > > > > cluster, or carry >> > > > > > > > > > > > > > > > out any important broker activities. By >> > > > “important”, >> > > > > I >> > > > > > > mean >> > > > > > > > > it >> > > > > > > > > > is >> > > > > > > > > > > > not >> > > > > > > > > > > > > > > doing >> > > > > > > > > > > > > > > > mutations >> > > > > > > > > > > > > > > > on it’s persistence, not mutating critical >> > > > in-memory >> > > > > > > state, >> > > > > > > > > > won’t >> > > > > > > > > > > > be >> > > > > > > > > > > > > > > > serving >> > > > > > > > > > > > > > > > produce/fetch requests. Note it doesn’t even >> > know >> > > > > it’s >> > > > > > > > > assigned >> > > > > > > > > > > > > > > partitions >> > > > > > > > > > > > > > > > until >> > > > > > > > > > > > > > > > it receives UpdateMetadataRequest from >> > > controller. >> > > > > > > Anything >> > > > > > > > > the >> > > > > > > > > > > > > broker >> > > > > > > > > > > > > > is >> > > > > > > > > > > > > > > > doing up >> > > > > > > > > > > > > > > > until this point is not damaging/useful. >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > I’ve clarified the above in the KIP, see >> this >> > new >> > > > > > > section: >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> > > > > > > > > > > > > > >> > > > > > > > > > > > > >> > > > > > > > > > > > >> > > > > > > > > > > >> > > > > > > > > > >> > > > > > > > > >> > > > > > > > >> > > > > > > >> > > > > > >> > > > > >> > > > >> > > >> > >> https://cwiki.apache.org/confluence/display/KAFKA/KIP-584%3A+Versioning+scheme+for+features#KIP-584:Versioningschemeforfeatures-Incompatiblebrokerlifetime >> > > > > > > > > > > > > > > > . >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > 5. "adding a new Feature, updating or >> > deleting >> > > an >> > > > > > > > existing >> > > > > > > > > > > > > Feature", >> > > > > > > > > > > > > > > may >> > > > > > > > > > > > > > > > be >> > > > > > > > > > > > > > > > > I misunderstood something, I thought the >> > > features >> > > > > are >> > > > > > > > > defined >> > > > > > > > > > > in >> > > > > > > > > > > > > > broker >> > > > > > > > > > > > > > > > > code, so admin could not really create a >> new >> > > > > feature? >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > (Kowshik): Great point! You understood this >> > > right. >> > > > > Here >> > > > > > > > > adding >> > > > > > > > > > a >> > > > > > > > > > > > > > feature >> > > > > > > > > > > > > > > > means we are >> > > > > > > > > > > > > > > > adding a cluster-wide finalized *max* >> version >> > > for a >> > > > > > > feature >> > > > > > > > > > that >> > > > > > > > > > > > was >> > > > > > > > > > > > > > > > previously never finalized. >> > > > > > > > > > > > > > > > I have clarified this in the KIP now. >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > 6. I think we need a separate error code >> like >> > > > > > > > > > > > > > > FEATURE_UPDATE_IN_PROGRESS >> > > > > > > > > > > > > > > > to >> > > > > > > > > > > > > > > > > reject a concurrent feature update >> request. >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > (Kowshik): Great point! I have modified the >> KIP >> > > > > adding >> > > > > > > the >> > > > > > > > > > above >> > > > > > > > > > > > (see >> > > > > > > > > > > > > > > > 'Tooling support -> Admin API changes'). >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > 7. I think we haven't discussed the >> > alternative >> > > > > > > solution >> > > > > > > > to >> > > > > > > > > > > pass >> > > > > > > > > > > > > the >> > > > > > > > > > > > > > > > > feature information through Zookeeper. Is >> > that >> > > > > > > mentioned >> > > > > > > > in >> > > > > > > > > > the >> > > > > > > > > > > > KIP >> > > > > > > > > > > > > > to >> > > > > > > > > > > > > > > > > justify why using UpdateMetadata is more >> > > > favorable? >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > (Kowshik): Nice question! The broker reads >> > > > finalized >> > > > > > > > feature >> > > > > > > > > > info >> > > > > > > > > > > > > > stored >> > > > > > > > > > > > > > > in >> > > > > > > > > > > > > > > > ZK, >> > > > > > > > > > > > > > > > only during startup when it does a >> validation. >> > > When >> > > > > > > serving >> > > > > > > > > > > > > > > > `ApiVersionsRequest`, the >> > > > > > > > > > > > > > > > broker does not read this info from ZK >> > directly. >> > > > I'd >> > > > > > > > imagine >> > > > > > > > > > the >> > > > > > > > > > > > risk >> > > > > > > > > > > > > > is >> > > > > > > > > > > > > > > > that it can increase >> > > > > > > > > > > > > > > > the ZK read QPS which can be a bottleneck >> for >> > the >> > > > > > system. >> > > > > > > > > > Today, >> > > > > > > > > > > in >> > > > > > > > > > > > > > Kafka >> > > > > > > > > > > > > > > > we use the >> > > > > > > > > > > > > > > > controller to fan out ZK updates to brokers >> and >> > > we >> > > > > want >> > > > > > > to >> > > > > > > > > > stick >> > > > > > > > > > > to >> > > > > > > > > > > > > > that >> > > > > > > > > > > > > > > > pattern to avoid >> > > > > > > > > > > > > > > > the ZK read bottleneck when serving >> > > > > > `ApiVersionsRequest`. >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > 8. I was under the impression that user >> could >> > > > > > > configure a >> > > > > > > > > > range >> > > > > > > > > > > > of >> > > > > > > > > > > > > > > > > supported versions, what's the trade-off >> for >> > > > > allowing >> > > > > > > > > single >> > > > > > > > > > > > > > finalized >> > > > > > > > > > > > > > > > > version only? >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > (Kowshik): Great question! The finalized >> > version >> > > > of a >> > > > > > > > feature >> > > > > > > > > > > > > basically >> > > > > > > > > > > > > > > > refers to >> > > > > > > > > > > > > > > > the cluster-wide finalized feature "maximum" >> > > > version. >> > > > > > For >> > > > > > > > > > > example, >> > > > > > > > > > > > if >> > > > > > > > > > > > > > the >> > > > > > > > > > > > > > > > 'group_coordinator' feature >> > > > > > > > > > > > > > > > has the finalized version set to 10, then, >> it >> > > means >> > > > > > that >> > > > > > > > > > > > cluster-wide >> > > > > > > > > > > > > > all >> > > > > > > > > > > > > > > > versions upto v10 are >> > > > > > > > > > > > > > > > supported for this feature. However, note >> that >> > if >> > > > > some >> > > > > > > > > version >> > > > > > > > > > > (ex: >> > > > > > > > > > > > > v0) >> > > > > > > > > > > > > > > > gets deprecated >> > > > > > > > > > > > > > > > for this feature, then we don’t convey that >> > using >> > > > > this >> > > > > > > > scheme >> > > > > > > > > > > (also >> > > > > > > > > > > > > > > > supporting deprecation is a non-goal). >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > (Kowshik): I’ve now modified the KIP at all >> > > points, >> > > > > > > > refering >> > > > > > > > > to >> > > > > > > > > > > > > > finalized >> > > > > > > > > > > > > > > > feature "maximum" versions. >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > 9. One minor syntax fix: Note that here >> the >> > > > > "client" >> > > > > > > here >> > > > > > > > > may >> > > > > > > > > > > be >> > > > > > > > > > > > a >> > > > > > > > > > > > > > > > producer >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > (Kowshik): Great point! Done. >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > Cheers, >> > > > > > > > > > > > > > > > Kowshik >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > On Tue, Mar 31, 2020 at 1:17 PM Boyang Chen >> < >> > > > > > > > > > > > > > reluctanthero...@gmail.com> >> > > > > > > > > > > > > > > > wrote: >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > Hey Kowshik, >> > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > thanks for the revised KIP. Got a couple >> of >> > > > > > questions: >> > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > 1. "When is it safe for the brokers to >> begin >> > > > > handling >> > > > > > > EOS >> > > > > > > > > > > > traffic" >> > > > > > > > > > > > > > > could >> > > > > > > > > > > > > > > > be >> > > > > > > > > > > > > > > > > converted as "When is it safe for the >> brokers >> > > to >> > > > > > start >> > > > > > > > > > serving >> > > > > > > > > > > > new >> > > > > > > > > > > > > > > > > Exactly-Once(EOS) semantics" since EOS is >> not >> > > > > > explained >> > > > > > > > > > earlier >> > > > > > > > > > > > in >> > > > > > > > > > > > > > the >> > > > > > > > > > > > > > > > > context. >> > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > 2. In the *Explanation *section, the >> metadata >> > > > > version >> > > > > > > > > number >> > > > > > > > > > > part >> > > > > > > > > > > > > > > seems a >> > > > > > > > > > > > > > > > > bit blurred. Could you point a reference >> to >> > > later >> > > > > > > section >> > > > > > > > > > that >> > > > > > > > > > > we >> > > > > > > > > > > > > > going >> > > > > > > > > > > > > > > > to >> > > > > > > > > > > > > > > > > store it in Zookeeper and update it every >> > time >> > > > when >> > > > > > > there >> > > > > > > > > is >> > > > > > > > > > a >> > > > > > > > > > > > > > feature >> > > > > > > > > > > > > > > > > change? >> > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > 3. For the feature downgrade, although >> it's a >> > > > > > Non-goal >> > > > > > > of >> > > > > > > > > the >> > > > > > > > > > > > KIP, >> > > > > > > > > > > > > > for >> > > > > > > > > > > > > > > > > features such as group coordinator >> semantics, >> > > > there >> > > > > > is >> > > > > > > no >> > > > > > > > > > legal >> > > > > > > > > > > > > > > scenario >> > > > > > > > > > > > > > > > to >> > > > > > > > > > > > > > > > > perform a downgrade at all. So having >> > downgrade >> > > > > door >> > > > > > > open >> > > > > > > > > is >> > > > > > > > > > > > pretty >> > > > > > > > > > > > > > > > > error-prone as human faults happen all the >> > > time. >> > > > > I'm >> > > > > > > > > assuming >> > > > > > > > > > > as >> > > > > > > > > > > > > new >> > > > > > > > > > > > > > > > > features are implemented, it's not very >> hard >> > to >> > > > > add a >> > > > > > > > flag >> > > > > > > > > > > during >> > > > > > > > > > > > > > > feature >> > > > > > > > > > > > > > > > > creation to indicate whether this feature >> is >> > > > > > > > > "downgradable". >> > > > > > > > > > > > Could >> > > > > > > > > > > > > > you >> > > > > > > > > > > > > > > > > explain a bit more on the extra >> engineering >> > > > effort >> > > > > > for >> > > > > > > > > > shipping >> > > > > > > > > > > > > this >> > > > > > > > > > > > > > > KIP >> > > > > > > > > > > > > > > > > with downgrade protection in place? >> > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > 4. "Each broker’s supported dictionary of >> > > feature >> > > > > > > > versions >> > > > > > > > > > will >> > > > > > > > > > > > be >> > > > > > > > > > > > > > > > defined >> > > > > > > > > > > > > > > > > in the broker code." So this means in >> order >> > to >> > > > > > > restrict a >> > > > > > > > > > > certain >> > > > > > > > > > > > > > > > feature, >> > > > > > > > > > > > > > > > > we need to start the broker first and then >> > > send a >> > > > > > > feature >> > > > > > > > > > > gating >> > > > > > > > > > > > > > > request >> > > > > > > > > > > > > > > > > immediately, which introduces a time gap >> and >> > > the >> > > > > > > > > > > > intended-to-close >> > > > > > > > > > > > > > > > feature >> > > > > > > > > > > > > > > > > could actually serve request during this >> > phase. >> > > > Do >> > > > > > you >> > > > > > > > > think >> > > > > > > > > > we >> > > > > > > > > > > > > > should >> > > > > > > > > > > > > > > > also >> > > > > > > > > > > > > > > > > support configurations as well so that >> admin >> > > user >> > > > > > could >> > > > > > > > > > freely >> > > > > > > > > > > > roll >> > > > > > > > > > > > > > up >> > > > > > > > > > > > > > > a >> > > > > > > > > > > > > > > > > cluster with all nodes complying the same >> > > feature >> > > > > > > gating, >> > > > > > > > > > > without >> > > > > > > > > > > > > > > > worrying >> > > > > > > > > > > > > > > > > about the turnaround time to propagate the >> > > > message >> > > > > > only >> > > > > > > > > after >> > > > > > > > > > > the >> > > > > > > > > > > > > > > cluster >> > > > > > > > > > > > > > > > > starts up? >> > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > 5. "adding a new Feature, updating or >> > deleting >> > > an >> > > > > > > > existing >> > > > > > > > > > > > > Feature", >> > > > > > > > > > > > > > > may >> > > > > > > > > > > > > > > > be >> > > > > > > > > > > > > > > > > I misunderstood something, I thought the >> > > features >> > > > > are >> > > > > > > > > defined >> > > > > > > > > > > in >> > > > > > > > > > > > > > broker >> > > > > > > > > > > > > > > > > code, so admin could not really create a >> new >> > > > > feature? >> > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > 6. I think we need a separate error code >> like >> > > > > > > > > > > > > > > FEATURE_UPDATE_IN_PROGRESS >> > > > > > > > > > > > > > > > to >> > > > > > > > > > > > > > > > > reject a concurrent feature update >> request. >> > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > 7. I think we haven't discussed the >> > alternative >> > > > > > > solution >> > > > > > > > to >> > > > > > > > > > > pass >> > > > > > > > > > > > > the >> > > > > > > > > > > > > > > > > feature information through Zookeeper. Is >> > that >> > > > > > > mentioned >> > > > > > > > in >> > > > > > > > > > the >> > > > > > > > > > > > KIP >> > > > > > > > > > > > > > to >> > > > > > > > > > > > > > > > > justify why using UpdateMetadata is more >> > > > favorable? >> > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > 8. I was under the impression that user >> could >> > > > > > > configure a >> > > > > > > > > > range >> > > > > > > > > > > > of >> > > > > > > > > > > > > > > > > supported versions, what's the trade-off >> for >> > > > > allowing >> > > > > > > > > single >> > > > > > > > > > > > > > finalized >> > > > > > > > > > > > > > > > > version only? >> > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > 9. One minor syntax fix: Note that here >> the >> > > > > "client" >> > > > > > > here >> > > > > > > > > may >> > > > > > > > > > > be >> > > > > > > > > > > > a >> > > > > > > > > > > > > > > > producer >> > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > Boyang >> > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > On Mon, Mar 30, 2020 at 4:53 PM Colin >> McCabe >> > < >> > > > > > > > > > > cmcc...@apache.org >> > > > > > > > > > > > > >> > > > > > > > > > > > > > > wrote: >> > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > On Thu, Mar 26, 2020, at 19:24, Kowshik >> > > > Prakasam >> > > > > > > wrote: >> > > > > > > > > > > > > > > > > > > Hi Colin, >> > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > Thanks for the feedback! I've changed >> the >> > > KIP >> > > > > to >> > > > > > > > > address >> > > > > > > > > > > your >> > > > > > > > > > > > > > > > > > > suggestions. >> > > > > > > > > > > > > > > > > > > Please find below my explanation. Here >> > is a >> > > > > link >> > > > > > to >> > > > > > > > KIP >> > > > > > > > > > > 584: >> > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> > > > > > > > > > > > > > >> > > > > > > > > > > > > >> > > > > > > > > > > > >> > > > > > > > > > > >> > > > > > > > > > >> > > > > > > > > >> > > > > > > > >> > > > > > > >> > > > > > >> > > > > >> > > > >> > > >> > >> https://cwiki.apache.org/confluence/display/KAFKA/KIP-584%3A+Versioning+scheme+for+features >> > > > > > > > > > > > > > > > > > > . >> > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > 1. '__data_version__' is the version >> of >> > the >> > > > > > > finalized >> > > > > > > > > > > feature >> > > > > > > > > > > > > > > > metadata >> > > > > > > > > > > > > > > > > > > (i.e. actual ZK node contents), while >> the >> > > > > > > > > > > > '__schema_version__' >> > > > > > > > > > > > > is >> > > > > > > > > > > > > > > the >> > > > > > > > > > > > > > > > > > > version of the schema of the data >> > persisted >> > > > in >> > > > > > ZK. >> > > > > > > > > These >> > > > > > > > > > > > serve >> > > > > > > > > > > > > > > > > different >> > > > > > > > > > > > > > > > > > > purposes. '__data_version__' is is >> useful >> > > > > mainly >> > > > > > to >> > > > > > > > > > clients >> > > > > > > > > > > > > > during >> > > > > > > > > > > > > > > > > reads, >> > > > > > > > > > > > > > > > > > > to differentiate between the 2 >> versions >> > of >> > > > > > > eventually >> > > > > > > > > > > > > consistent >> > > > > > > > > > > > > > > > > > 'finalized >> > > > > > > > > > > > > > > > > > > features' metadata (i.e. larger >> metadata >> > > > > version >> > > > > > is >> > > > > > > > > more >> > > > > > > > > > > > > recent). >> > > > > > > > > > > > > > > > > > > '__schema_version__' provides an >> > additional >> > > > > > degree >> > > > > > > of >> > > > > > > > > > > > > > flexibility, >> > > > > > > > > > > > > > > > > where >> > > > > > > > > > > > > > > > > > if >> > > > > > > > > > > > > > > > > > > we decide to change the schema for >> > > > '/features' >> > > > > > node >> > > > > > > > in >> > > > > > > > > ZK >> > > > > > > > > > > (in >> > > > > > > > > > > > > the >> > > > > > > > > > > > > > > > > > future), >> > > > > > > > > > > > > > > > > > > then we can manage broker roll outs >> > > suitably >> > > > > > (i.e. >> > > > > > > > > > > > > > > > > > > serialization/deserialization of the >> ZK >> > > data >> > > > > can >> > > > > > be >> > > > > > > > > > handled >> > > > > > > > > > > > > > > safely). >> > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > Hi Kowshik, >> > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > If you're talking about a number that >> lets >> > > you >> > > > > know >> > > > > > > if >> > > > > > > > > data >> > > > > > > > > > > is >> > > > > > > > > > > > > more >> > > > > > > > > > > > > > > or >> > > > > > > > > > > > > > > > > > less recent, we would typically call >> that >> > an >> > > > > epoch, >> > > > > > > and >> > > > > > > > > > not a >> > > > > > > > > > > > > > > version. >> > > > > > > > > > > > > > > > > For >> > > > > > > > > > > > > > > > > > the ZK data structures, the word >> "version" >> > is >> > > > > > > typically >> > > > > > > > > > > > reserved >> > > > > > > > > > > > > > for >> > > > > > > > > > > > > > > > > > describing changes to the overall >> schema of >> > > the >> > > > > > data >> > > > > > > > that >> > > > > > > > > > is >> > > > > > > > > > > > > > written >> > > > > > > > > > > > > > > to >> > > > > > > > > > > > > > > > > > ZooKeeper. We don't even really change >> the >> > > > > > "version" >> > > > > > > > of >> > > > > > > > > > > those >> > > > > > > > > > > > > > > schemas >> > > > > > > > > > > > > > > > > that >> > > > > > > > > > > > > > > > > > much, since most changes are >> > > > > backwards-compatible. >> > > > > > > But >> > > > > > > > > we >> > > > > > > > > > do >> > > > > > > > > > > > > > include >> > > > > > > > > > > > > > > > > that >> > > > > > > > > > > > > > > > > > version field just in case. >> > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > I don't think we really need an epoch >> here, >> > > > > though, >> > > > > > > > since >> > > > > > > > > > we >> > > > > > > > > > > > can >> > > > > > > > > > > > > > just >> > > > > > > > > > > > > > > > > look >> > > > > > > > > > > > > > > > > > at the broker epoch. Whenever the >> broker >> > > > > > registers, >> > > > > > > > its >> > > > > > > > > > > epoch >> > > > > > > > > > > > > will >> > > > > > > > > > > > > > > be >> > > > > > > > > > > > > > > > > > greater than the previous broker epoch. >> > And >> > > > the >> > > > > > > newly >> > > > > > > > > > > > registered >> > > > > > > > > > > > > > > data >> > > > > > > > > > > > > > > > > will >> > > > > > > > > > > > > > > > > > take priority. This will be a lot >> simpler >> > > than >> > > > > > > adding >> > > > > > > > a >> > > > > > > > > > > > separate >> > > > > > > > > > > > > > > epoch >> > > > > > > > > > > > > > > > > > system, I think. >> > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > 2. Regarding admin client needing min >> and >> > > max >> > > > > > > > > > information - >> > > > > > > > > > > > you >> > > > > > > > > > > > > > are >> > > > > > > > > > > > > > > > > > right! >> > > > > > > > > > > > > > > > > > > I've changed the KIP such that the >> Admin >> > > API >> > > > > also >> > > > > > > > > allows >> > > > > > > > > > > the >> > > > > > > > > > > > > user >> > > > > > > > > > > > > > > to >> > > > > > > > > > > > > > > > > read >> > > > > > > > > > > > > > > > > > > 'supported features' from a specific >> > > broker. >> > > > > > Please >> > > > > > > > > look >> > > > > > > > > > at >> > > > > > > > > > > > the >> > > > > > > > > > > > > > > > section >> > > > > > > > > > > > > > > > > > > "Admin API changes". >> > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > Thanks. >> > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > 3. Regarding the use of `long` vs >> `Long` >> > - >> > > it >> > > > > was >> > > > > > > not >> > > > > > > > > > > > > deliberate. >> > > > > > > > > > > > > > > > I've >> > > > > > > > > > > > > > > > > > > improved the KIP to just use `long` at >> > all >> > > > > > places. >> > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > Sounds good. >> > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > 4. Regarding >> kafka.admin.FeatureCommand >> > > tool >> > > > - >> > > > > > you >> > > > > > > > are >> > > > > > > > > > > right! >> > > > > > > > > > > > > > I've >> > > > > > > > > > > > > > > > > > updated >> > > > > > > > > > > > > > > > > > > the KIP sketching the functionality >> > > provided >> > > > by >> > > > > > > this >> > > > > > > > > > tool, >> > > > > > > > > > > > with >> > > > > > > > > > > > > > > some >> > > > > > > > > > > > > > > > > > > examples. Please look at the section >> > > "Tooling >> > > > > > > support >> > > > > > > > > > > > > examples". >> > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > Thank you! >> > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > Thanks, Kowshik. >> > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > cheers, >> > > > > > > > > > > > > > > > > > Colin >> > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > Cheers, >> > > > > > > > > > > > > > > > > > > Kowshik >> > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > On Wed, Mar 25, 2020 at 11:31 PM Colin >> > > > McCabe < >> > > > > > > > > > > > > > cmcc...@apache.org> >> > > > > > > > > > > > > > > > > > wrote: >> > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > Thanks, Kowshik, this looks good. >> > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > In the "Schema" section, do we >> really >> > > need >> > > > > both >> > > > > > > > > > > > > > > __schema_version__ >> > > > > > > > > > > > > > > > > and >> > > > > > > > > > > > > > > > > > > > __data_version__? Can we just have >> a >> > > > single >> > > > > > > > version >> > > > > > > > > > > field >> > > > > > > > > > > > > > here? >> > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > Shouldn't the Admin(Client) function >> > have >> > > > > some >> > > > > > > way >> > > > > > > > to >> > > > > > > > > > get >> > > > > > > > > > > > the >> > > > > > > > > > > > > > min >> > > > > > > > > > > > > > > > and >> > > > > > > > > > > > > > > > > > max >> > > > > > > > > > > > > > > > > > > > information that we're exposing as >> > > well? I >> > > > > > guess >> > > > > > > > we >> > > > > > > > > > > could >> > > > > > > > > > > > > have >> > > > > > > > > > > > > > > > min, >> > > > > > > > > > > > > > > > > > max, >> > > > > > > > > > > > > > > > > > > > and current. Unrelated: is the use >> of >> > > Long >> > > > > > > rather >> > > > > > > > > than >> > > > > > > > > > > > long >> > > > > > > > > > > > > > > > > deliberate >> > > > > > > > > > > > > > > > > > > > here? >> > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > It would be good to describe how the >> > > > command >> > > > > > line >> > > > > > > > > tool >> > > > > > > > > > > > > > > > > > > > kafka.admin.FeatureCommand will >> work. >> > > For >> > > > > > > example >> > > > > > > > > the >> > > > > > > > > > > > flags >> > > > > > > > > > > > > > that >> > > > > > > > > > > > > > > > it >> > > > > > > > > > > > > > > > > > will >> > > > > > > > > > > > > > > > > > > > take and the output that it will >> > generate >> > > > to >> > > > > > > > STDOUT. >> > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > cheers, >> > > > > > > > > > > > > > > > > > > > Colin >> > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > On Tue, Mar 24, 2020, at 17:08, >> Kowshik >> > > > > > Prakasam >> > > > > > > > > wrote: >> > > > > > > > > > > > > > > > > > > > > Hi all, >> > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > I've opened KIP-584 >> > > > > > > > > > > > > > > < >> https://issues.apache.org/jira/browse/KIP-584> >> > < >> > > > > > > > > > > > > > > > >> https://issues.apache.org/jira/browse/KIP-584 >> > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > which >> > > > > > > > > > > > > > > > > > > > > is intended to provide a >> versioning >> > > > scheme >> > > > > > for >> > > > > > > > > > > features. >> > > > > > > > > > > > > I'd >> > > > > > > > > > > > > > > like >> > > > > > > > > > > > > > > > > to >> > > > > > > > > > > > > > > > > > use >> > > > > > > > > > > > > > > > > > > > > this thread to discuss the same. >> I'd >> > > > > > appreciate >> > > > > > > > any >> > > > > > > > > > > > > feedback >> > > > > > > > > > > > > > on >> > > > > > > > > > > > > > > > > this. >> > > > > > > > > > > > > > > > > > > > > Here >> > > > > > > > > > > > > > > > > > > > > is a link to KIP-584 >> > > > > > > > > > > > > > > < >> https://issues.apache.org/jira/browse/KIP-584>: >> > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> > > > > > > > > > > > > > >> > > > > > > > > > > > > >> > > > > > > > > > > > >> > > > > > > > > > > >> > > > > > > > > > >> > > > > > > > > >> > > > > > > > >> > > > > > > >> > > > > > >> > > > > >> > > > >> > > >> > >> https://cwiki.apache.org/confluence/display/KAFKA/KIP-584%3A+Versioning+scheme+for+features >> > > > > > > > > > > > > > > > > > > > > . >> > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > Thank you! >> > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > Cheers, >> > > > > > > > > > > > > > > > > > > > > Kowshik >> > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> > > > > > > > > > > > > > >> > > > > > > > > > > > > >> > > > > > > > > > > > >> > > > > > > > > > > >> > > > > > > > > > >> > > > > > > > > >> > > > > > > > >> > > > > > > >> > > > > > >> > > > > >> > > > >> > > >> > >> >