Thanks a lot for the KIP Ray!

It seems to be a good improvement to make using KS with Clojure more seamless.

However, I am not 100% sure if all listed interfaces make sense?


(100) GlobalKTable: it's basically a sibling to `KStream`, and `KTable` interfaces, but users would never implemented it, and thus I think it won't make much sense to add the annotation. Playing devils advocate, it could even be "harmful" as it might provide a wrong signal to users that this interface would be intended to be implemented by them.


(200) NamedOperation: this is some helper interface that user also won't need to implement. I am less worried about being harmful (as I am for GlobalKTable), but I also don't see much of an advantage.


(300) TransformerSupplier and ValueTransformerSupplier: both are going to be deprecate with 4.0, which is only a side cleanup anyway. Both can only be used with `KStream.transform()`, `.flatTransform()`, `.transformValues()` and `.flatTransformValues()` and all four method will be removed in 4.0 rending both interface practically useless. -- No damage to include them, but also not useful.


(400) ProcessorSupplier and Processor: there is currently two interfaces with each name, the old and already deprecated interfaces `...processor.Processor[Supplier]` and the new `...processor.api.Processor[Supplier]`. The KIP should be explicit and say `api.Proceccor[Supplier]` as only the new interfaces have annotation already, but not the old ones. - The old interfaces do also not need to be updated IMHO, as will we remove both with 4.0, too.


(410) There is also two interfaces `...processor.ProcessorContext` and `...processor.api.ProcessorContext`. Both are still in used, and thus the KIP should mention both explicitly.


(500) I am not sure if the KIP need to explicitly list all interface it does not update... It's a long list and it might be easier to read the KIP if omitted?


(600) There is some other interface/abstract-classes which might benefit from the annotation, too:


 - org.apache.kafka.streams.errors:

DeserializationExceptionHandler (does not qualify now, but we could include it in the KIP and file a follow up ticket for the future to add it, when we remove the deprecated method? -- This would avoid the need for another KIP in the future)
   StreamsUncaughtExceptionHandler


 - org.apache.kafka.streams.processor.api:

   ContextualFixedKeyProcessor
   ContextualProcessor


 - org.apache.kafka.streams.processor:

   CommitCallback
   Punctuator
   StateRestoreCallback
StreamPartitioner (there is already a open PR to remove the deprecate method so it will qualify in 4.0 release)
   TimestampExtractor
   TopicNameExtractor



-Matthias


On 7/29/24 12:47 AM, Ray McDermott wrote:
These annotations assist with clarifying the purpose of the interface, as well 
as assisting interop with non-Java JVM languages.

https://cwiki.apache.org/confluence/display/KAFKA/KIP-1072%3A+Add+@FunctionalInterface+annotation+to+Kafka+Streams+SAM+methods

Comments welcome

Thanks

Ray

Reply via email to