Kafka与Scala一起流

时间:2017-09-04 21:00:43

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

我正在尝试使用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

2 个答案:

答案 0 :(得分:5)

您的语法错误:)。 ->只是创建对的运算符,因此表达式

(key,value)-> {
  println(key)
}

具有类型((Any,Any),Unit),因为编译器无法推断任何类型信息(并且keyvalue缺失)

如果您使用scala 2.12将->替换为=>应解决问题,但如果您使用的是旧版本的scala,则必须明确实现java双功能:

 textLines.foreach(new BiFunction[T1, T2] { ... })

答案 1 :(得分:1)

您可以使用print方法直接打印kafkastream。

  

textlines.print

它将打印kafka流。您甚至可以通过将参数传递给print函数来打印键或值。