Hi Stephane, Yes, you'll want to have your TransformerSupplier to return a new instance of your Transformer Otherwise, the same Transformer instance is used across all tasks. Since the Transformer can potentially perform stateful operations with a state store, and/or you can schedule punctations using the same instance across tasks can lead to inconsistent results.
Thanks, Bill On Mon, Sep 24, 2018 at 8:12 AM Stéphane. D. <der...@gmail.com> wrote: > Hi, > > We just stumbled upon an issue with KStream.transform() where we had a > runtime error with this code: > > ``` > DeduplicationTransformer<X, Y, , > transformer = new > DeduplicationTransformer<>(...); > stream.transform(() -> transformer, ...) > ``` > > The error was: > Failed to process stream task 0_0 due to the following error: > java.lang.IllegalStateException: This should not happen as timestamp() > should only be called while a record is processed > > Whereas simply inlining the creation of the Transformer works perfectly: > > ``` > stream.transform(() -> new DeduplicationTransformer<>(...), ...) > ``` > > Is this behavior expected? > > > Is that why transform() takes a lazy function, to access some global > state when needed at execution? (and breaking referential > transparency) > > > Thanks, > > Stéphane >