You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jira@kafka.apache.org by "John Roesler (JIRA)" <ji...@apache.org> on 2018/05/15 20:47:00 UTC

[jira] [Commented] (KAFKA-6905) Document that Processor objects can be reused

    [ https://issues.apache.org/jira/browse/KAFKA-6905?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16476447#comment-16476447 ] 

John Roesler commented on KAFKA-6905:
-------------------------------------

Thanks for the report, [~glasser],

Can you provide some more information about your setup and scenario?

I also read that line as meaning that init() should be called once per instance, but the code paths that get there are quite complicated, so it's hard to say whether that's the intent or not.

It sounds like the documentation can be improved, regardless, but I think having your scenario in mind will help (me) to clarify the situation.

 

Thanks,

-John

> Document that Processor objects can be reused
> ---------------------------------------------
>
>                 Key: KAFKA-6905
>                 URL: https://issues.apache.org/jira/browse/KAFKA-6905
>             Project: Kafka
>          Issue Type: Improvement
>          Components: documentation, streams
>            Reporter: David Glasser
>            Priority: Major
>
> We learned the hard way that Kafka Streams will reuse Processor objects by calling init() on them after they've been close()d.  This caused a bug in our application as we assumed we didn't have to reset all of our Processor's state to a proper starting state on init().
> As far as I can tell, this is completely undocumented. The fact that we provide Processors to Kafka Streams via a ProcessorSupplier factory rather than just by passing in a Processor object made it seem likely that in fact Streams was creating Processors from scratch each time it needed a new one.
> The developer guide ([https://docs.confluent.io/current/streams/developer-guide/processor-api.html)] doesn't even allude to the existence of the close() method, let alone the idea that init() may be called after close().
> The Javadocs for Processor.init says: "The framework ensures this is called once per processor when the topology that contains it is initialized."  I personally interpreted that as meaning that it only is ever called once!  I can see that you could interpret it otherwise, but it's definitely unclear.
> I can send a PR but first want to confirm that this is a doc problem and not a bug!



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)