+1 on 1.0. I think it makes a lot of sense given the point Kafka is now. To
me Kafka has absolutely reached 1.0 in terms of features/functions. That
said, I do share the same opinion with others that the usablity and
policies might still need some improvement to meet the 1.0 standard.

On Sat, Jul 22, 2017 at 7:21 AM, Matthias J. Sax <matth...@confluent.io>
wrote:

> I agree with Ismael. If we go for 1.0 (what I do support), we need to
> meet people's expectations and should document all policies and
> guarantees explicitly. We might also consider to support older releases
> longer and do bug fix release for older releases, too.
>
> Other projects (like Flink) do a fantastic job with this regard and we
> should learn from them.
>
> -Matthias
>
> On 7/21/17 9:50 PM, Guozhang Wang wrote:
> > That's fair enough too.
> >
> > Guozhang
> >
> > On Fri, Jul 21, 2017 at 12:13 PM, Ismael Juma <isma...@gmail.com> wrote:
> >
> >> Yes, I agree that the choice of version number can be done separately.
> >> That's why I said I'd file a separate JIRA for the documentation
> >> improvements. Having said that, there are some expectations that people
> >> have for projects that have reached 1.0.0 and we should try to allocate
> >> time for the important ones.
> >>
> >> Ismael
> >>
> >> On 21 Jul 2017 8:07 pm, "Guozhang Wang" <wangg...@gmail.com> wrote:
> >>
> >>> Thanks Ismael. I agree with you on all these points, and for some of
> >> these
> >>> points like 3) we never have a written-down policy though in practice
> we
> >>> tend to follow some patterns.
> >>>
> >>> To me deciding what's the version number of the next major release does
> >> not
> >>> necessarily mean we need now to change any of these or to set the hard
> >>> rules along with it; I'd like to keep them as two separate discussions
> as
> >>> they seem semi-orthogonal to me.
> >>>
> >>>
> >>> Guozhang
> >>>
> >>>
> >>> On Fri, Jul 21, 2017 at 8:44 AM, Ismael Juma <ism...@juma.me.uk>
> wrote:
> >>>
> >>>> On the topic of documentation, we should also document which releases
> >> are
> >>>> still supported and which are not. There a few factors to consider:
> >>>>
> >>>> 1. Which branches receive bug fixes. We typically backport fixes to
> the
> >>> two
> >>>> most recent stable branches (the most recent stable branch typically
> >> gets
> >>>> more backports than the older one).
> >>>>
> >>>> 2. Which branches receive security fixes. This could be the same as
> >> `1`,
> >>>> but we could attempt to backport more aggressively for security fixes
> >> as
> >>>> they tend to be rare (so far at least) and the impact could be severe.
> >>>>
> >>>> 3. The release policy for stable branches. We tend to stop releasing
> >>> from a
> >>>> given stable branch before we stop backporting fixes. Maybe that's OK,
> >>> but
> >>>> it would be good to document how we decide that a bug fix release is
> >>>> needed.
> >>>>
> >>>> 4. How long are direct upgrades supported for. During the time-based
> >>>> releases discussion, we agreed to support direct upgrades for 2 years.
> >> As
> >>>> it happens, direct upgrades from 0.8.2 to 1.0.0 would not be supported
> >> if
> >>>> we follow this strictly. Not clear if we want to do that.
> >>>>
> >>>> 5. How long are older clients supported for. Current brokers support
> >>>> clients all the way to 0.8.x.
> >>>>
> >>>> 6. How long are older brokers supported for. Current clients support
> >>> 0.10.x
> >>>> and newer brokers.
> >>>>
> >>>> 7. How long are message formats supported for. We never discussed
> >> this. I
> >>>> think 5 years would probably be the minimum.
> >>>>
> >>>> Ismael
> >>>>
> >>>> P.S. I'll file a JIRA to capture this information.
> >>>>
> >>>> On Wed, Jul 19, 2017 at 10:12 AM, Ismael Juma <ism...@juma.me.uk>
> >> wrote:
> >>>>
> >>>>> Hi Stevo,
> >>>>>
> >>>>> Thanks for your feedback. We should definitely do a better job of
> >>>>> documenting things. We basically follow semantic versioning, but it's
> >>>>> currently a bit confusing because:
> >>>>>
> >>>>> 1. There are 4 segments in the version. The "0." part should be
> >> ignored
> >>>>> when deciding what is major, minor and patch at the moment, but many
> >>>> people
> >>>>> don't know this. Once we move to 1.0.0, that problem goes away.
> >>>>>
> >>>>> 2. To know what is a public API, you must check the Javadoc (
> >>>>> https://kafka.apache.org/0110/javadoc/index.html?org/
> >>>>> apache/kafka/clients/consumer/KafkaConsumer.html). If it's not
> >> listed
> >>>>> there, it's not public API. Ideally, it would be obvious from the
> >>> package
> >>>>> name (i.e. there would be "internals" in the name), but we are not
> >>> there
> >>>>> yet. The exception are the old Scala APIs, but they have all been
> >>>>> deprecated and they will be removed eventually (the old Scala
> >> consumers
> >>>>> won't be removed until the June 2018 release at the earliest in order
> >>> to
> >>>>> give people time to migrate).
> >>>>>
> >>>>> 3. Even though we are following reasonably common practices, we
> >> haven't
> >>>>> documented them all in one place. It would be great to do it during
> >> the
> >>>>> next release cycle.
> >>>>>
> >>>>> A few comments below.
> >>>>>
> >>>>> On Wed, Jul 19, 2017 at 1:31 AM, Stevo Slavić <ssla...@gmail.com>
> >>> wrote:
> >>>>>
> >>>>>> - APIs not labeled or labeled as stable
> >>>>>> -- change in major version is only one that can break backward
> >>>>>> compatibility (client APIs or behavior)
> >>>>>>
> >>>>>
> >>>>> To clarify, stable APIs should not be changed in an incompatible way
> >>>>> without a deprecation cycle. Independently of whether it's a major
> >>>> release
> >>>>> or not.
> >>>>>
> >>>>>
> >>>>>> -- change in minor version can introduce new features, but not break
> >>>>>> backward compatibility
> >>>>>> -- change in patch version, is for bug fixes only.
> >>>>>>
> >>>>>
> >>>>> Right, this has been the case for a while already. Also see
> >> annotations
> >>>>> below.
> >>>>>
> >>>>>
> >>>>>> - APIs labeled as evolving can be broken in backward incompatible
> >> way
> >>> in
> >>>>>> any release, but are assumed less likely to be broken compared to
> >>>> unstable
> >>>>>> APIs
> >>>>>> - APIs labeled as unstable can be broken in backward incompatible
> >> way
> >>> in
> >>>>>> any release, major, minor or patch
> >>>>>>
> >>>>>
> >>>>> The relevant annotations do explain this:
> >>>>>
> >>>>> https://kafka.apache.org/0110/javadoc/org/apache/kafka/
> >>>> common/annotation/
> >>>>> InterfaceStability.html
> >>>>> https://kafka.apache.org/0110/javadoc/org/apache/kafka/
> >>>> common/annotation/
> >>>>> InterfaceStability.Stable.html
> >>>>> https://kafka.apache.org/0110/javadoc/org/apache/kafka/
> >>>> common/annotation/
> >>>>> InterfaceStability.Evolving.html
> >>>>> https://kafka.apache.org/0110/javadoc/org/apache/kafka/
> >>>> common/annotation/
> >>>>> InterfaceStability.Unstable.html
> >>>>>
> >>>>> But we should have a section in our documentation as well.
> >>>>>
> >>>>>
> >>>>>> - deprecated stable APIs are treated as any stable APIs, they can be
> >>>>>> removed only in major release, are not allowed to be changed in
> >>> backward
> >>>>>> incompatible way in either patch or minor version release
> >>>>>>
> >>>>>
> >>>>> Right, but note that stable non-deprecated APIs provide stronger
> >>>>> guarantees in major releases (they can't be changed in an
> >> incompatible
> >>>> way).
> >>>>>
> >>>>>>
> >>>>>> This means one should be able to upgrade server and recompile/deploy
> >>>> apps
> >>>>>> with clients to new minor.patch release with dependency version
> >> change
> >>>>>> being only change needed and there would be no drama.
> >>>>>>
> >>>>>
> >>>>> That should have been the case for a while as long as you are using
> >>>> stable
> >>>>> public APIs.
> >>>>>
> >>>>>>
> >>>>>> Practice/"features" like protocol version being a parameter, and
> >>>>>> defaulting
> >>>>>> to latest so auto updated with dependency update which introduces
> >> new
> >>>>>> protocol/behavior should not be used in public client APIs. To
> >> switch
> >>>>>> between backward incompatible APIs (contract and behaviors), ideally
> >>>> user
> >>>>>> should explicitly have to change code and not dependency only, but
> >> at
> >>>>>> least
> >>>>>> it should be clearly communicated that there are breaking changes to
> >>>>>> expect
> >>>>>> even with just dependency update by e.g. giving major version
> >> release
> >>>>>> clear
> >>>>>> meaning. If app dependency on Kafka client library minor.patch on
> >> same
> >>>>>> major is updated, and if there's a change in behavior or API
> >> requiring
> >>>> app
> >>>>>> code change - it's a bug.
> >>>>>>
> >>>>>
> >>>>> Hmm, if the protocol bump provides improved behaviour, that is not a
> >>>>> backwards incompatible change though. So, I don't think I agree with
> >>>> this.
> >>>>> Of course,
> >>>>> it does mean that _downgrading_ may cause loss of functionality.
> >> That's
> >>>>> OK, in my opinion.
> >>>>>
> >>>>> Change introduced contrary to the SLO, is OK to be reported as bug.
> >>>>>> Everything else is improvement or feature request.
> >>>>>>
> >>>>>> If this was the case, and 1.0.0 was released today with APIs as they
> >>> are
> >>>>>> now, Scala client APIs even though deprecated would not break and
> >>>> require
> >>>>>> refactoring with every 1.* minor/patch release, and would only be
> >>>> allowed
> >>>>>> to be broken or removed in future major release, like 2.0.0
> >>>>>>
> >>>>>
> >>>>> Yes, that is the plan for any _public_ Scala client APIs that are
> >> still
> >>>>> present in 1.0.0. The public Scala client APIs are the producer and
> >>>>> consumer, basically. Again, we should make this clear in our
> >>>> documentation.
> >>>>> Note that we have made an effort to keep those APIs compatible for
> >>> quite
> >>>> a
> >>>>> while. It sounds like you have had some issues, were they related to
> >>>> usage
> >>>>> of internal Admin APIs by any chance (since we didn't have a public
> >>>>> AdminClient API until very recently)?
> >>>>>
> >>>>>>
> >>>>>> It should be also clear how long is each version supported - e.g. if
> >>>>>> minor.patch had meaning that there are no backward incompatible
> >>> changes,
> >>>>>> it's OK to file a bug only for current major.minor.patch; previous
> >>> major
> >>>>>> and its last minor.patch can only have patches released up to some
> >>> time
> >>>>>> like 1 up to 3 months.
> >>>>>>
> >>>>>
> >>>>> I am not sure I understood this point correctly. Can you please
> >>> clarify?
> >>>>>
> >>>>> If there are changes in release cadence with new versioning, it
> >> should
> >>> be
> >>>>>> clear too.
> >>>>>>
> >>>>>
> >>>>> No changes are planned. We have started time-based releases less
> >> than a
> >>>>> year ago and they seem to be going well.
> >>>>>
> >>>>> Ismael
> >>>>>
> >>>>
> >>>
> >>>
> >>>
> >>> --
> >>> -- Guozhang
> >>>
> >>
> >
> >
> >
>
>

Reply via email to