Yes! Sorry for that typo.

On 12/1/16 5:07 PM, Guozhang Wang wrote:
> You mean "it is a backward incompatible change" right?
> 
> On Wed, Nov 30, 2016 at 4:28 PM, Matthias J. Sax <matth...@confluent.io>
> wrote:
> 
>> Thanks for this clarification (and your +1)
>>
>> I completely agree and just want to add my thoughts:
>>
>> 1. Yes, it is a backward compatible change but as I discusses with
>> others, we want accept this for now. All previous releases did contain
>> non-compatible changes for Kafka Streams, too. And as Kafka Streams API
>> is not guaranteed to be stable at this point, we better do breaking
>> changes now than later.
>>
>> 2. At some point, we need to be more conservative with breaking chances
>> and only allow them for major releases.
>>
>> 3. As we expect that most people do use default timestamp extractor,
>> they will not be effected anyway. Only if custom extractors are used,
>> the application needs to be recompiled. Thus, the effort to make the
>> change backward compatible seems not to be worth the effort.
>>
>>
>> -Matthias
>>
>> On 11/29/16 9:57 PM, Ewen Cheslack-Postava wrote:
>>> I think this looks reasonable, but just a more general note on
>>> compatibility -- I think it's worth trying to clarify what types of
>>> compatibility we're trying to achieve. Guozhang's 1 & 2 give an important
>>> breakdown (compile vs runtime compatibility). For the type of change
>>> described here, I think it makes sense to clarify the compatibility
>> goals.
>>> The (pure) compile time compatibility vs (pure) runtime compatibility
>>> aren't the only options -- you have some additional intermediate choices
>> as
>>> well.
>>>
>>> The proposal describes a change which requires recompiling the plugin
>>> (TimestampExtractor) *and* substituting a runtime library (kafka-streams
>>> jar) to get correct updated behavior. This can get interesting if you
>>> already have N streams apps sharing the same TimestampExtractor. You now
>>> *must* update all of them to the new streams jar if any are to be updated
>>> for the new TimestampExtractor API. For folks with a monolithic
>>> repo/versioning setup, this could potentially be painful since they're
>>> forced to update all apps at once. It's at least not too bad since it can
>>> be isolated to a single commit (without deployment needing to be
>>> coordinated, for example), but if the # of apps gets > 4 or 5, these
>> types
>>> of updates start to be a real pain.
>>>
>>> I think this API change is an acceptable (albeit annoying) API
>>> incompatibility right now, but wanted to raise this in the discussion of
>>> this KIP so we consider this moving forward. There definitely are
>>> alternatives that add the new functionality but maintain compatibility
>>> better. In particular, it's possible to define the new interface to
>> require
>>> both APIs:
>>>
>>> // new interface
>>> public interface TimestampExtractor {
>>>     long extract(ConsumerRecord<Object, Object> record);
>>>     long extract(ConsumerRecord<Object, Object> record, long
>>> previousTimestamp);
>>> }
>>>
>>> which requires more effort for the implementor of the new API, but
>>> maintains compatibility if you want to use a new jar including the
>>> TimestampExtractor even with the old version of streams/the
>>> TimestampExtractor interface (since it will correctly dispatch to the old
>>> implementation). It requires more effort on the part of the framework
>> since
>>> it needs to catch runtime exceptions when the second version of extract()
>>> is missing and fall back to the first version. But in some cases that
>> might
>>> be warranted for the sake of compatibility.
>>>
>>> I suspect this update won't cause too much pain right now just because
>> the
>>> number of streams app any user has won't be too large quite yet, but this
>>> seems important to consider moving forward. I think we had some similar
>>> concerns & discussion around the changes to the consumer APIs when trying
>>> to generalize the collection types used in those APIs.
>>>
>>> -Ewen
>>>
>>>
>>> On Mon, Nov 28, 2016 at 10:46 AM, Matthias J. Sax <matth...@confluent.io
>>>
>>> wrote:
>>>
>>>> Done.
>>>>
>>>> If there is no further comments, I would like to start a voting thread
>>>> in a separate email.
>>>>
>>>> -Matthias
>>>>
>>>> On 11/28/16 9:08 AM, Guozhang Wang wrote:
>>>>> Yes it does not include these, again in my previous previous email I
>>>> meant
>>>>> when you say "This is a breaking, incompatible change" people may
>>>> interpret
>>>>> it differently. So better explain it more clearly.
>>>>>
>>>>>
>>>>> Guozhang
>>>>>
>>>>> On Thu, Nov 24, 2016 at 10:31 PM, Matthias J. Sax <
>> matth...@confluent.io
>>>>>
>>>>> wrote:
>>>>>
>>>>>> That does make sense. But KIP-93 does not change anything like this,
>> so
>>>>>> there is nothing to mention, IMHO.
>>>>>>
>>>>>> Or do you mean, the KIP should include that the change is backward
>>>>>> compatible with this regard?
>>>>>>
>>>>>> -Matthias
>>>>>>
>>>>>>
>>>>>>
>>>>>> On 11/24/16 5:31 PM, Guozhang Wang wrote:
>>>>>>> What I meant is that, for some changes (e.g. say we change the
>>>>>>> auto-repartition behavior that caused using different name
>> conventions,
>>>>>> or
>>>>>>> some changes that involve changing the underlying state store names,
>>>> etc)
>>>>>>> the existing internal state including the stores and topics will
>>>> probably
>>>>>>> not valid. Some users consider this also as a "backward incompatible
>>>>>>> change" since they cannot just swipe in the new jar and restart.
>>>>>>>
>>>>>>>
>>>>>>> Guozhang
>>>>>>>
>>>>>>>
>>>>>>> On Wed, Nov 23, 2016 at 3:20 PM, Matthias J. Sax <
>>>> matth...@confluent.io>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> Thanks for the feedback. I updated the KIP for (1) and (2).
>>>>>>>>
>>>>>>>> However not for (3): Why should it be required to reset an
>>>> application?
>>>>>>>> If user processed "good" data with valid timestamps, behavior does
>> not
>>>>>>>> change. If user tried to process "bad" data with invalid timestamps,
>>>> the
>>>>>>>> application does fail currently anyway, so there is nothing to
>> reset.
>>>>>>>>
>>>>>>>>
>>>>>>>> -Matthias
>>>>>>>>
>>>>>>>> On 11/22/16 9:53 AM, Guozhang Wang wrote:
>>>>>>>>> Regarding the "compatibility" section, I would suggest being a bit
>>>> more
>>>>>>>>> specific about why it is a breaking change. For Streams, it could
>>>> mean
>>>>>>>>> different things:
>>>>>>>>>
>>>>>>>>> 1. User need code change when switching library dependency on the
>> new
>>>>>>>>> version, otherwise it won't compile(I think this is the case for
>> this
>>>>>>>> KIP).
>>>>>>>>> 2. User need code change when switching library dependency on the
>> new
>>>>>>>>> version, otherwise runtime exception will be thrown.
>>>>>>>>> 3. Existing application state as well as internal topics need to be
>>>>>>>> swiped
>>>>>>>>> and the program need to restart from zero.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Guozhang
>>>>>>>>>
>>>>>>>>> On Fri, Nov 18, 2016 at 12:27 PM, Matthias J. Sax <
>>>>>> matth...@confluent.io
>>>>>>>>>
>>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>>> Hi all,
>>>>>>>>>>
>>>>>>>>>> I want to start a discussion about KIP-93:
>>>>>>>>>>
>>>>>>>>>> https://cwiki.apache.org/confluence/display/KAFKA/KIP-
>>>>>>>>>> 93%3A+Improve+invalid+timestamp+handling+in+Kafka+Streams
>>>>>>>>>>
>>>>>>>>>> Looking forward to your feedback.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> -Matthias
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>
>>>
>>
>>
> 
> 

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to