Flink开发五步之第二步:Source

一、Collection/Elements Source 示例

package com.second_source
import org.apache.flink.streaming.api.scala._
/**
  * Collection/Elements Source 示例
  */
object Source_CollectionOrElements {
  def main(args: Array[String]): Unit = {
    // 1、第一步:设置执行环境设定
    val env: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment
    val arr: Array[String] = Array("name1", "name2", "name3")
    // 2、第二步:读取数据 (Source)
    val ds1: DataStream[String] = env.fromCollection(arr)
    val ds2: DataStream[String] = env.fromElements("name1","h","p")
    // 5、第五步:指定名称并触发流式任务
    ds1.print("stream1")
    ds2.print("Stream2")
    env.execute("Source_CollectionOrElements")
  }
}

二、Text Source 示例

package com.second_source

import org.apache.flink.streaming.api.scala.{DataStream, StreamExecutionEnvironment}

/**
  * Text Source 示例
  */
object Source_Text {
  def main(args: Array[String]): Unit = {
    val environment: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment
    val ds: DataStream[String] = environment.readTextFile("D:\\flink\\FlinkStudy\\src\\main\\resources\\hello.txt")
    ds.print("stream")
    environment.execute()
  }
}

三、Socket Source 示例

package com.second_source

import org.apache.flink.streaming.api.scala.{DataStream, StreamExecutionEnvironment}
/**
  * Socket Source 示例
  */
object Source_Socket {
  def main(args: Array[String]): Unit = {
    val env: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment
    val ds: DataStream[String] = env.socketTextStream("localhost",10)
    ds.print("Stream")
    env.execute()
  }
}

四、Kafka Source 示例

package com.second_source

import java.util.Properties
import org.apache.flink.api.common.serialization.SimpleStringSchema
import org.apache.flink.streaming.api.scala._
import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer011

/**
  * Kafka Source 示例
  */
object Source_Kafka {
  def main(args: Array[String]): Unit = {
    val env: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment
    // 创建KafkaDS
    val kafkaDS: DataStream[String] = env.addSource(getKafkaConsumer())

    kafkaDS.print("stream")
    env.execute()
  }

  /**
    * 创建FlinkKafkaConsumer
    * @return FlinkKafkaConsumer011[String]
    */
  def getKafkaConsumer(): FlinkKafkaConsumer011[String] ={
    // 设置kafka配置
    val properties = new Properties()
    properties.setProperty("bootstrap.servers", "master:9092")
    properties.setProperty("group.id", "consumer-group")
    properties.setProperty("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer")
    properties.setProperty("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer")
    properties.setProperty("auto.offset.reset", "latest")

    // kafka的topic,反序列化方式,Kafka配置
    // SimpleStringSchema 默认使用UTF-8解码
    new FlinkKafkaConsumer011[String]("sensor", new SimpleStringSchema(), properties)
  }
}

五、自定义 Source 示例

package com.second_source

import org.apache.flink.streaming.api.functions.source.{RichSourceFunction, SourceFunction}

/**
  * 自定义Source
  */
class MyCustomSourceFunction extends RichSourceFunction[String]{
  // flag:表示数据源是否还在正常运行
  var running: Boolean = true

  override def run(ctx: SourceFunction.SourceContext[String]): Unit = {

    val arr: Range.Inclusive = 1.to(10)

    while (running){
      arr.foreach(t =>
        ctx.collect(t.toString)
      )

      Thread.sleep(100)
    }
  }

  override def cancel(): Unit = {
    running = false
  }
}

package com.second_source

import org.apache.flink.streaming.api.scala._

/**
  * 自定义 Source 示例
  */
object Source_Custom {
  def main(args: Array[String]): Unit = {
    val env: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment

    val customDS: DataStream[String] = env.addSource(new MyCustomSourceFunction)

    customDS.print("stream")

    env.execute()
  }
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值