Glad to hear that. I think it worth adding an FAQ entry as it seems to be a
common scenarios that users forgot to config on the final consumption stage.


Guozhang

On Tue, Feb 19, 2019 at 4:28 AM Xander Uiterlinden <uiter...@gmail.com>
wrote:

> Thanks for your reply. I figured out what was wrong, and it turned out to
> be a stupid mistake at my end as I did not use a consumer with isolation
> level "read_committed" to verify.
>
> Xander
>
> On Fri, Feb 8, 2019 at 8:58 PM Guozhang Wang <wangg...@gmail.com> wrote:
>
> > Hello Xander,
> >
> > Upon committing the state with `exactly_once`, Streams will commit the
> > transaction by going through the commit protocol (details can be found
> here
> > [1]). So I guess the following happened in time:
> >
> > 1) one record gets read in.
> > 2) processing the record by traversing the topology, not yet reached the
> > exception-thrown transformer node, takes more than 100ms.
> > 3) task.commit() gets triggered, which flush the state.
> > 4) the txn.commit() triggers that commits the record to the output
> topic1.
> > 5) exception thrown on transformer node before output topic2.
> >
> > To confirm it is indeed the case, could you also share your code snippet
> > for constructing the topology, as well as the actual transform logic
> here?
> >
> >
> > [1]
> >
> >
> https://cwiki.apache.org/confluence/display/KAFKA/KIP-129%3A+Streams+Exactly-Once+Semantics
> >
> > Guozhang
> >
> >
> > On Wed, Feb 6, 2019 at 6:14 AM Xander Uiterlinden <uiter...@gmail.com>
> > wrote:
> >
> > > Hi,
> > >
> > > I'm trying to get a fairly simple example of using Kafka Streams with
> > > exactly once processing to work. I defined a setup where messages are
> > being
> > > read from an input topic and two streams transform and output the
> result
> > to
> > > their own output topic.
> > > In normal conditions this works fine, i.e. when publishing a message to
> > the
> > > input topic, I get transformed messages in both of the output topics.
> > > Next I enabled exactly once processing by setting
> "processing.guarantee"
> > to
> > > "exactly_once". To test this I'm deliberately throwing an exception
> when
> > > transforming the message in one of the stream processors. At a first
> > glance
> > > the result is as expected, as neither of the output topics contain the
> > > transformed message and the application stops processing.
> > > However, when processing a message takes longer than the
> > > commit.interval.ms
> > > (which defaults to 100 when using exactly_once), then the transactional
> > > guarantee does not appear to be there and I get an output message in
> only
> > > one of the output topics (the one I for which I did not deliberately
> > throw
> > > an exception while processing). I tested this by putting a
> Thread.sleep()
> > > before throwing the Exception.
> > > Can someone explain the relationship between this commit.interval.ms
> and
> > > exactly_once processing. I'd think it's rather strange that when
> > processing
> > > takes longer than the commit.interval.ms you lose the atomicity of the
> > > transaction.
> > > I'm using Kafka 2.12-1.1.0 by the way.
> > >
> > > Kind regards,
> > >
> > > Xander
> > >
> >
> >
> > --
> > -- Guozhang
> >
>


-- 
-- Guozhang

Reply via email to