Hello folks,

As we are approaching the feature freeze deadline of 0.11.0.0, one thing I
realized is that currently the Streams public APIs are still marked as
"Unstable", which is to indicate that the API itself does not provide
guarantees about backward compatibility across releases. On the other hand,
since Streams have now been widely adopted in production use cases by many
organizations, we are in fact evolving its APIs in a much stricter manner
than "Unstable" allows us: for all the current Streams related KIP
proposals under discussions right now [1], people have been working hard to
make sure none of them are going to break backward compatibility in the
coming releases. So I think it would be a good timing to change the Streams
API annotations.

My proposal would be the following:

1. For "o.a.k.streams.errors" and "o.a.k.streams.state" packages: remove
the annotations except `StreamsMetrics`.

2. For "o.a.k.streams.kstream": remove the annotations except "KStream",
"KTable", "GroupedKStream", "GroupedKTable", "GlobalKTable" and
"KStreamBuilder".

3. For all the other public classes, including "o.a.k.streams.processor"
and the above mentioned classes, change the annotation to "Evolving", which
means "we might break compatibility at minor releases (i.e. 0.12.x, 0.13.x,
1.0.x etc) only".


The ultimate goal is to make sure we won't break anything going forward,
hence in the future we should remove all the annotations to make that
clear. The above changes in 0.11.0.0 is to give us some "buffer time" in
case there are some major API change proposals after the release.

Would love to hear your thoughts.


[1]

KIP-95: Incremental Batch Processing for Kafka Streams
<https://cwiki.apache.org/confluence/display/KAFKA/KIP-95%3A+Incremental+Batch+Processing+for+Kafka+Streams>

KIP-120: Cleanup Kafka Streams builder API
<https://cwiki.apache.org/confluence/display/KAFKA/KIP-120%3A+Cleanup+Kafka+Streams+builder+API>

KIP-123: Allow per stream/table timestamp extractor
<https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=68714788>

KIP 130: Expose states of active tasks to KafkaStreams public API
<https://cwiki.apache.org/confluence/display/KAFKA/KIP+130%3A+Expose+states+of+active+tasks+to+KafkaStreams+public+API>

KIP-132: Augment KStream.print to allow extra parameters in the printed
string
<https://cwiki.apache.org/confluence/display/KAFKA/KIP-132+-+Augment+KStream.print+to+allow+extra+parameters+in+the+printed+string>

KIP-138: Change punctuate semantics
<https://cwiki.apache.org/confluence/display/KAFKA/KIP-138%3A+Change+punctuate+semantics>

KIP-147: Add missing type parameters to StateStoreSupplier factories and
KGroupedStream/Table methods
<https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=69408481>

KIP-149: Enabling key access in ValueTransformer, ValueMapper, and
ValueJoiner
<https://cwiki.apache.org/confluence/display/KAFKA/KIP-149%3A+Enabling+key+access+in+ValueTransformer%2C+ValueMapper%2C+and+ValueJoiner#KIP-149:EnablingkeyaccessinValueTransformer,ValueMapper,andValueJoiner-RejectedAlternatives>

KIP-150 - Kafka-Streams Cogroup
<https://cwiki.apache.org/confluence/display/KAFKA/KIP-150+-+Kafka-Streams+Cogroup>

KIP 155 - Add range scan for windowed state stores
<https://cwiki.apache.org/confluence/display/KAFKA/KIP+155+-+Add+range+scan+for+windowed+state+stores>

KIP 156 Add option "dry run" to Streams application reset tool
<https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=69410150>


-- 
-- Guozhang

Reply via email to