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
>

Reply via email to