Kafka与Flink的连接不仅适用于YARN部署

时间:2017-03-23 10:44:05

标签: apache-kafka cluster-computing yarn apache-flink

我开发了一个消耗Kafka流的简单Flink作业。一切都在当地环境中发挥作用。但是当我尝试使用YARN在我的集群上运行我的Flink作业时,什么都没有发生。 (并且,我没有任何错误消息)。

./bin/flink run -m yarn-cluster -yn 4 /Flink/Flink_Stream_Kafka/jar-with-dependencies.jar --server X.X.X.X:9092 --topic logs

我当然检查了我的群集是否可以访问流,但它有。我甚至可以在我的集群的每台机器上运行我的工作作为一个简单的java程序,它可以工作。

有什么见解可以解释这个吗?

谢谢

编辑:

object KafkaConsuming {

  def main(args: Array[String]) {


    // Flink parameter tool
    // Allow to pass arguments to this script
    val params: ParameterTool = ParameterTool.fromArgs(args)

    // set up streaming execution environment
    val env = StreamExecutionEnvironment.getExecutionEnvironment

    // make parameters available globally
    env.getConfig.setGlobalJobParameters(params)

    val properties = new Properties();
    properties.setProperty("bootstrap.servers", params.get("server"));

    // only requied for Kafka 0.8
    //properties.rsetProperty("zookeeper.connect", "X.X.X.X:2181");

    val stream: DataStream[String] = env.addSource(new FlinkKafkaConsumer010[String](params.get("topic"), new SimpleStringSchema(), properties))

    //stream.print()

    val logs: DataStream[MinifiedLog] = stream.map(x => LogParser2.parse(x))

    val sessions = logs.map { x => (x.timestamp, x.sent, 1l)}

    val sessionCnt: DataStream[(Long, Long, Long)] = sessions
      // key stream by sensorId
      .keyBy(2)
      // tumbling time window of 1 minute length
      .window(TumblingProcessingTimeWindows.of(Time.seconds(10)))  
      .reduce( (x: (Long, Long, Long), y: (Long, Long, Long)) => (x._1, x._2 + y._2, x._3 + y._3))
      .map { z => (z._1, z._2 / 10, z._3 / 10)}

     sessionCnt.print()

    env.execute("Kafka consuming")

  }
}

1 个答案:

答案 0 :(得分:1)

sessionCnt.print()的输出将写入TaskManagers的标准输出。

在YARN上,访问该输出的最简单方法是使用聚合的YARN日志(yarn logs -applicationId <appid>)检索所有日志。

我不确定Flink UI中对标准输出文件的访问是否正常工作。

检查数据是否到达的另一种方法是使用Flink Web UI。