繁体   English   中英

2022年Scala如何使用Flink的KafkaSource

[英]How to use Flink's KafkaSource with Scala in 2022

我已经检查了这个类似但有 7 年历史的问题,但它不适用于较新的 Flink 版本。

我正在尝试运行一个简单的 Flink Kafka 作业,并尝试了各种版本,每个版本都有不同的编译错误。 我正在使用 sbt 来管理我的依赖项:

val flinkDependencies = Seq(
  "org.apache.flink" %% "flink-clients" % flinkVersion,
  "org.apache.flink" %% "flink-scala" % flinkVersion,
  "org.apache.flink" %% "flink-streaming-scala" % flinkVersion,
  "org.apache.flink" %% "flink-connector-kafka" % flinkVersion
)

尝试过的版本:
scala 2.11.12 和 2.12.15
弗林克 1.14.6

我正在尝试编译的代码(相关位):

import org.apache.flink.streaming.util.serialization.SimpleStringSchema
import org.apache.flink.connector.kafka.source.KafkaSource

...

  val env = ExecutionEnvironment.getExecutionEnvironment
  val kafkaConsumer = new KafkaSource.builder[String]
    .setBootstrapservers("localhost:9092")
    .setGroupId("flink")
    .setTopics("test")
    .build()

  val text = env.fromSource(kafkaConsumer)

我没有找到一个官方示例来说明这确实应该如何使用KafkaSource ,但我在此处此处找到了此设置。 在我仍然很陌生的 Java 眼中,这看起来与API 文档一致。 但是是的,它无法与 Scala 版本一起使用:

[error] somepathwithmyfile: type builder is not a member of object org.apache.flink.connector.kafka.source.KafkaSource
[error]     val kafkaConsumer = new KafkaSource.builder[String]
[error]                                         ^
[error] somepathwithmyfile: value fromSource is not a member of org.apache.flink.api.scala.ExecutionEnvironment
[error]     val text = env.fromSource(kafkaConsumer)
[error]                    ^
[error] two errors found

对于第一个问题,删除new的:

 val kafkaConsumer = KafkaSource.builder[String]
   ...

对于第二个问题, fromSource需要三个arguments:

  /** Create a DataStream using a [[Source]]. */
  @Experimental
  def fromSource[T: TypeInformation](
      source: Source[T, _ <: SourceSplit, _],
      watermarkStrategy: WatermarkStrategy[T],
      sourceName: String): DataStream[T] = {

    val typeInfo = implicitly[TypeInformation[T]]
    asScalaStream(javaEnv.fromSource(source, watermarkStrategy, sourceName, typeInfo))
  }

另外请注意,Flink(目前)还不支持 scala 2.12.15。 请参阅https://issues.apache.org/jira/browse/FLINK-20969 但是,如果排除 Flink 内置的 scala API 支持,Flink 1.15 可以与较新版本的 Scala(包括 Scala 3)一起使用。 有关更多信息,请参见https://flink.apache.org/2022/02/22/scala-free.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM