Scala 在弗林克消费多个卡夫卡经纪人的多个主题

Scala 在弗林克消费多个卡夫卡经纪人的多个主题,scala,apache-kafka,apache-flink,Scala,Apache Kafka,Apache Flink,我将flink-1.4.2与scala一起使用,我希望使用Kafka的多个数据流源。我使用了合并它们的union函数,但我能够使用一个卡夫卡源 def main(args: Array[String]) { val kProps = new Properties() kProps.setProperty("bootstrap.servers", "kafka01.prod.com:9092") kProps.setProperty("group.id", "test_cg

我将flink-1.4.2与scala一起使用,我希望使用Kafka的多个数据流源。我使用了合并它们的union函数,但我能够使用一个卡夫卡源

def main(args: Array[String]) {
    val kProps = new Properties()
    kProps.setProperty("bootstrap.servers", "kafka01.prod.com:9092")
    kProps.setProperty("group.id", "test_cg")
    kProps.setProperty("enable.auto.commit", "true")
    kProps.setProperty("auto.offset.reset", "latest")
    val kProps2 = new Properties()
    kProps2.setProperty("bootstrap.servers", "kafka04.prod.com:9092")
    kProps2.setProperty("group.id", "test_cg_2")
    kProps2.setProperty("enable.auto.commit", "true")
    kProps2.setProperty("auto.offset.reset", "latest")
    val sink = new BucketingSink[SimpleKafkaOutputMsg]("s3://some-bucket/")
    sink.setBucketer(new DateTimeBucketer[SimpleKafkaOutputMsg]("yyyy-MM-dd-HH"))
    sink.setWriter(new StringWriter[SimpleKafkaOutputMsg])
    sink.setBatchSize(350 * 1024 * 1024) // 350 MB
    sink.setPendingPrefix("file-")
    sink.setPendingSuffix(".csv")

    val env = StreamExecutionEnvironment.getExecutionEnvironment

    env.setStreamTimeCharacteristic(TimeCharacteristic.ProcessingTime)
    env.setParallelism(9)
    env.setStateBackend(new RocksDBStateBackend("file:///tmp/flink/checkpoints", false))
    val topics = List("ROUNDTRIP1")
    val inpStream1 = env.addSource(new FlinkKafkaConsumer011(topics.asJava, new IndexedSectorMessagDes(), kProps))

    val topics2 = List("ROUNDTRIP2")
    val inpStream2 = env.addSource(new FlinkKafkaConsumer011(topics2.asJava, new IndexedSectorMessagDes(), kProps2))

    val inpStream = inpStream1.union(inpStream2)
    .filter(new InvalidFlightsFilterFunction())
    .map(attachUID(_))
    .assignTimestampsAndWatermarks(new IngestionTimeExtractor[IndexedSectorMessage]())
    val intStream = inpStream.flatMap { s => flattenFlights(s) }
    intStream.keyBy(getFlightKey _).process(new KeyedWindowTimeMedianFunction()).addSink(sink)
    env.execute("Scala WindowExample Example")`

你能更详细地解释一下你面临的问题吗?流的联合不是从多个主题消费吗?我们有两个不同的kafka代理集群,从每个kafka代理集群,我们需要消费不同的kafka主题。因此,我们使用不同的kafka代理群集创建了两个不同的输入流,我们使用union合并了两个输入流,但它能够连接一个kafka代理群集。您能够从运行Flink的机器ping第二个代理群集吗?您收到的错误消息是什么?是的,我可以。