Flink_输入数据集 Data Sources

本文详细介绍了Flink在流处理中常见的数据源类型,包括基于集合、文件、网络套接字和自定义的数据源。重点讲解了如何创建非并行、并行数据源,以及如何使用SourceFunction接口。此外,还深入探讨了基于Kafka和MySQL的source操作,包括Kafka集群的启动与停止、创建与管理topic、生产与消费数据,以及从MySQL读取数据的实现思路。
摘要由CSDN通过智能技术生成


Flink 中你可以使用 StreamExecutionEnvironment.addSource(source) 来为你的程序添 加数据来源。 Flink 已 经 提 供 了 若 干 实 现 好 了 的 source functions ,当 然 你 也 可 以 通 过 实 现 SourceFunction 来自定义非并行的 source 或者实现 ParallelSourceFunction 接口或者扩展 RichParallelSourceFunction 来自定义并行的 source。

1.Flink 在流处理上常见的 Source

Flink 在流处理上常见的 Source ,Flink 在流处理上的 source 和在批处理上的 source 基本一致。
大致有 4 大类

  • 基于本地集合的 source(Collection-based-source)
  • 基于文件的 source(File-based-source)- 读取文本文件,即符合 TextInputFormat 规范 的文件,并将其作为字符串返回
  • 基于网络套接字的 source(Socket-based-source)- 从 socket 读取。元素可以用分隔符切分。
  • 自定义的 source(Custom-source)

2.基于集合的 source

单个示例

package com.czxy.flink.stream.source.collection

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

//DataStream[String]
object StreamFromElementsSource {
   

  def main(args: Array[String]): Unit = {
   
    //1.创建流处理的执行环境
    val env: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment
    //2.构建数据源
    import org.apache.flink.api.scala._
    val elementDataStream: DataStream[String] = env.fromElements("hadoop hadoop hive flink")
    //3.打印输出
    elementDataStream.print()
    //4.执行程序
    env.execute("StreamFromElementsSource")
    //env.execute(this.getClass.getSimpleName)
  }
}

多个示例

package cn.czxy.stream.source

import org.apache.flink.streaming.api.scala.{
   DataStream, StreamExecutionEnvironment}
import scala.collection.immutable.{
   Queue, Stack} import scala.collection.mutable
import scala.collection.mutable.{
   ArrayBuffer, ListBuffer} import org.apache.flink.api.scala._

object StreamDataSourceDemo {
   

def main(args: Array[String]): Unit = {
   

val senv = StreamExecutionEnvironment.getExecutionEnvironment

//0.用element创建DataStream(fromElements)

val ds0: DataStream[String] = senv.fromElements("spark", "flink") ds0.print()

//1.用Tuple创建DataStream(fromElements)

val ds1: DataStream[(Int, String)] = senv.fromElements((1, "spark"), (2, "flink"))
ds1.print()

//2.用Array创建DataStream

val ds2: DataStream[String] = senv.fromCollection(Array("spark", "flink"))
ds2.print()

//3.用ArrayBuffer创建DataStream val ds3: DataStream[String] =
senv.fromCollection(ArrayBuffer("spark", "flink"))

ds3.print()

//4.用List创建DataStream

val ds4: DataStream[String] = senv.fromCollection(List("spark", "flink"))
ds4.print()

//5.用List创建DataStream

val ds5: DataStream[String] =
senv.fromCollection(ListBuffer("spark", "flink")) ds5.print()

//6.用Vector创建DataStream

val ds6: DataStream[String] = senv.fromCollection(Vector("spark", "flink"))
ds6.print()
//7.用Queue创建DataStream

val ds7: DataStream[String] = senv.fromCollection(Queue("spark", "flink"))
ds7.print()

//8.用Stack创建DataStream

val ds8: DataStream[String] = senv.fromCollection(Stack("spark", "flink"))
ds8.print()


//9.用Stream创建DataStream(Stream相当于lazy List,避免在中间过程中生成不必要的集合)

val ds9: DataStream[String] = senv.fromCollection(Stream("spark", "flink"))
ds9.print()

//10.用Seq创建DataStream

val ds10: DataStream[String
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值