我正在尝试使用scala的kafka流 下面是我在Java中的代码完全正常:
KStreamBuilder builder = new KStreamBuilder();
KStream<String, String> textLines = builder.stream("TextLinesTopic");
textLines.foreach((key,values) -> {
System.out.println(values);
});
KafkaStreams streams = new KafkaStreams(builder, config);
streams.start();
我的scala代码如下:
val builder = new KStreamBuilder
val textLines:KStream[String, String] = builder.stream("TextLinesTopic")
textLines.foreach((key,value)-> {
println(key)
})
val streams = new KafkaStreams(builder, config)
streams.start()
scala代码抛出编译错误。期望的类型不匹配:ForEachAction [&gt; String,&gt; String],Actual((any,any),Unit) 找不到:值键 未找到:价值值
有没有人知道如何在scala中使用流API
答案 0 :(得分:5)
您的语法错误:)。 ->
只是创建对的运算符,因此表达式
(key,value)-> {
println(key)
}
具有类型((Any,Any),Unit),因为编译器无法推断任何类型信息(并且key
和value
缺失)
如果您使用scala 2.12将->
替换为=>
应解决问题,但如果您使用的是旧版本的scala,则必须明确实现java双功能:
textLines.foreach(new BiFunction[T1, T2] { ... })
答案 1 :(得分:1)
您可以使用print方法直接打印kafkastream。
textlines.print
它将打印kafka流。您甚至可以通过将参数传递给print函数来打印键或值。