如何将Java api KStream转换为Scala api KStream?

时间:2019-09-27 07:46:41

标签: scala apache-kafka apache-kafka-streams

我们的库中有使用典型的kafka流的数据处理器(Scala代码):

import org.apache.kafka.streams.StreamsBuilder
import org.apache.kafka.streams.kstream.KStream

之所以移到kafka-stream-scala的原因是,每当我使用groupBy,selectByKey等函数时,返回类型就会很奇怪。

(builder: StreamsBuilder, stream: KStream[String, Event]) =>
 val wgCreatedStream = stream.groupBy((_,v) => 
  v.payload match {
   case x:WorkgroupCreated => x.id //this is a String
  })

以该代码为例。 StreamsBuilder个结果到KGroupedStream[Nothing,Event]

当我使用这些导入时:

import org.apache.kafka.streams.scala.{ByteArrayWindowStore, StreamsBuilder}
import org.apache.kafka.streams.scala.kstream.{Grouped, KStream, Materialized}
import org.apache.kafka.streams.scala.Serdes.{String,Long}

返回类型最终更改为KGroupedStream[String,Event]

我真正希望的是: 在不重构数据处理器的情况下使用kafka-stream-scala

如果是,那就太好了,尤其是。如果有例子!
如果没有,那将是一个痛苦的旅程。 :((无论如何还是要感谢)

1 个答案:

答案 0 :(得分:1)

好的,与同事聊天后,我立即找到了答案。 -___-

来自org.apache.kafka.streams.scala.ImplicitConversions
有一个wrapKStream()可以将
streams.kstream.KStream转换为streams.scala.kstream.KStream

关于另一种方法,只需直接调用inner方法。 KTable也是如此。