Hi Miguel,

Kafka v3.1.0 has already code freezed, and is dealing with some blocker
issues. It should be released soon.

For this feature status in v3.0.0, I think Matthias knows it the most.
As far as I know, it was ready for v3.0.0 originally, but there's a
regression bug found(KAFKA-13216
<https://issues.apache.org/jira/browse/KAFKA-13216>), so this feature was
disabled.
I'm not sure if this feature still worked as designed in v3.0.0 if you
manually enable it.

I still think that waiting for v3.1.0 release is a better choice (if
possible).

Thank you.
Luke

On Tue, Dec 14, 2021 at 1:34 AM Miguel González <miguel.gonza...@klar.mx>
wrote:

> Hi Matthias
>
> Do you know when the 3.1 version is going to be released?
>
> I noticed the JoinWindows class has a boolean property called
> enableSpuriousResultFix
>
> If I extend the class the set that flag to true will it eliminate spurious
> messages in kafka streams 3.0.0 ?
>
>
> thanks
> - Miguel
>
>
> On Mon, Dec 6, 2021 at 2:49 PM Matthias J. Sax <mj...@apache.org> wrote:
>
> > It's fixed in upcoming 3.1 release.
> >
> > Cf https://issues.apache.org/jira/browse/KAFKA-10847
> >
> >
> > A stream-(global)table join has different semantics, so I am not sure if
> > it would help.
> >
> > One workaround would be to apply a stateful` faltTransformValues()`
> > after the join to "buffer" all NULL-results and only emit them after you
> > know no consecutive inner-join result will happen. It's tricky to build
> > though.
> >
> > I would recommend to wait and upgrade to 3.1 after it was releases.
> >
> >
> > -Matthias
> >
> > On 11/30/21 12:59 AM, Luke Chen wrote:
> > > Hi Miguel,
> > >> Is there a way to force the behavior I need, meaning... using left
> join
> > > and
> > > a JoinWindows output only one message (A,B) or (A, null)
> > >
> > > I think you can try to achieve it by using *KStream-GlobalKTable left
> > join*,
> > > where the GlobalKTable should read all records at the right topic, and
> > then
> > > doing the left join operation. This should then output either (A,B), or
> > (A,
> > > null).
> > >
> > > Thank you.
> > > Luke
> > >
> > > On Tue, Nov 30, 2021 at 1:23 AM Miguel González <
> miguel.gonza...@klar.mx
> > >
> > > wrote:
> > >
> > >> Hello
> > >>
> > >> I have been developing a Kafka Streams app that takes as input two
> > topics
> > >> as KStreams, processes them in some way and joins them and sends the
> > >> combined message to an output topic.
> > >>
> > >> Here's some code,
> > >>
> > >> final StreamJoined<String, TransactionEvent, BalanceEvent> joinParams
> =
> > >>      StreamJoined.with(
> > >>          STRING_SERDE,
> > >>          StreamSerdeConstants.TRANSACTION_EVENT_SERDE,
> > >>          StreamSerdeConstants.BALANCE_EVENT_SERDE);
> > >>
> > >> JoinWindows joinWindows = JoinWindows
> > >>
> .of(Duration.ofSeconds(streamsProperties.getJoinWindowDuration()))
> > >>
> > .grace(Duration.ofSeconds(streamsProperties.getJoinGraceDuration()));
> > >>
> > >> ValueJoiner<TransactionEvent, BalanceEvent, BalanceHistoryEvent>
> > >> valueJoiner =
> > >>      (transactionEvent, balanceEvent) -> buildMessage(balanceEvent,
> > >> transactionEvent);
> > >>
> > >>
> > >> transactions
> > >>      // TODO: change to leftJoin
> > >>      .join(beWithTransaction, valueJoiner, joinWindows, joinParams)
> > >>
> > >>
> > >> It's pretty simple, but for my use case I need to process in some way
> > the
> > >> messages that are not joined, so I thought I could use a LEFT JOIN.
> But
> > >> according to my tests and this documentation
> > >> https://www.confluent.io/blog/crossing-streams-joins-apache-kafka/
> > >>
> > >> I have seen in the end I could end up with both the combined message
> as
> > the
> > >> regular inner join performs and the message with one side as NULL, for
> > >> example (A,B) and (A, null)
> > >>
> > >> I thought the JOIN Window could force the output of the left join to
> > just
> > >> output if it found a match to just (A,B) not both. Maybe I have a bug
> > in my
> > >> Window configuration
> > >>
> > >> Is there a way to force the behavior I need, meaning... using left
> join
> > and
> > >> a JoinWindows output only one message (A,B) or (A, null)
> > >>
> > >> regards
> > >> - Miguel
> > >>
> > >
> >
>

Reply via email to