This would sting a whole lot less if there was a programmatic way to get what server version is in use. Also, how will this work in mixed version clusters (during an upgrade, for example)?
> On Jan 15, 2015, at 10:10, Joe Stein <joe.st...@stealth.ly> wrote: > > Looping in the mailing list that the client developers live on because they > are all not on dev (though they should be if they want to be helping to build > the best client libraries they can). > > I whole hardily believe that we need to not break existing functionality of > the client protocol, ever. > > There are many reasons for this and we have other threads on the mailing list > where we are discussing that topic (no pun intended) that I don't want to > re-hash here. > > If we change wire protocol functionality OR the binary format (either) we > must bump version AND treat version as a feature flag with backward > compatibility support until it is deprecated for some time for folks to deal > with it. > > match version = { > case 0: keepDoingWhatWeWereDoing() > case 1: doNewStuff() > case 2: doEvenMoreNewStuff() > } > > has to be a practice we adopt imho ... I know feature flags can be construed > as "messy code" but I am eager to hear another (better? different?) solution > to this. > > If we don't do a feature flag like this specifically with this change then > what happens is that someone upgrades their brokers with a rolling restart in > 0.8.3 and every single one of their producer requests start to fail and they > have a major production outage. eeeek!!!! > > I do 100% agree that > 1 makes no sense and we *REALLY* need people to start > using 0,1,-1 but we need to-do that in a way that is going to work for > everyone. > > Old producers and consumers must keep working with new brokers and if we are > not going to support that then I am unclear what the use of "version" is > based on our original intentions of having it because of the 0.7=>-0.8. We > said no more breaking changes when we did that. > > - Joe Stein > >> On Thu, Jan 15, 2015 at 12:38 PM, Ewen Cheslack-Postava <e...@confluent.io> >> wrote: >> Right, so this looks like it could create an issue similar to what's >> currently being discussed in >> https://issues.apache.org/jira/browse/KAFKA-1649 where users now get errors >> under conditions when they previously wouldn't. Old clients won't even know >> about the error code, so besides failing they won't even be able to log any >> meaningful error messages. >> >> I think there are two options for compatibility: >> >> 1. An alternative change is to remove the ack > 1 code, but silently >> "upgrade" requests with acks > 1 to acks = -1. This isn't the same as other >> changes to behavior since the interaction between the client and server >> remains the same, no error codes change, etc. The client might just see >> some increased latency since the message might need to be replicated to >> more brokers than they requested. >> 2. Split this into two patches, one that bumps the protocol version on that >> message to include the new error code but maintains both old (now >> deprecated) and new behavior, then a second that would be applied in a >> later release that removes the old protocol + code for handling acks > 1. >> >> 2 is probably the right thing to do. If we specify the release when we'll >> remove the deprecated protocol at the time of deprecation it makes things a >> lot easier for people writing non-java clients and could give users better >> predictability (e.g. if clients are at most 1 major release behind brokers, >> they'll remain compatible but possibly use deprecated features). >> >> >> On Wed, Jan 14, 2015 at 3:51 PM, Gwen Shapira <gshap...@cloudera.com> wrote: >> >> > Hi Kafka Devs, >> > >> > We are working on KAFKA-1697 - remove code related to ack>1 on the >> > broker. Per Neha's suggestion, I'd like to give everyone a heads up on >> > what these changes mean. >> > >> > Once this patch is included, any produce requests that include >> > request.required.acks > 1 will result in an exception. This will be >> > InvalidRequiredAcks in new versions (0.8.3 and up, I assume) and >> > UnknownException in existing versions (sorry, but I can't add error >> > codes retroactively). >> > >> > This behavior is already enforced by 0.8.2 producers (sync and new), >> > but we expect impact on users with older producers that relied on acks >> > > 1 and external clients (i.e python, go, etc). >> > >> > Users who relied on acks > 1 are expected to switch to using acks = -1 >> > and a min.isr parameter than matches their user case. >> > >> > This change was discussed in the past in the context of KAFKA-1555 >> > (min.isr), but let us know if you have any questions or concerns >> > regarding this change. >> > >> > Gwen >> > >> >> >> >> -- >> Thanks, >> Ewen > > -- > You received this message because you are subscribed to the Google Groups > "kafka-clients" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to kafka-clients+unsubscr...@googlegroups.com. > To post to this group, send email to kafka-clie...@googlegroups.com. > Visit this group at http://groups.google.com/group/kafka-clients. > To view this discussion on the web visit > https://groups.google.com/d/msgid/kafka-clients/CAA7ooCBtH2JjyQsArdx_%3DV25B4O1QJk0YvOu9U6kYt9sB4aqng%40mail.gmail.com. > For more options, visit https://groups.google.com/d/optout.