玩转Flink里面核心的Source Operator实战——第四课

DBC 1.6K 0

一、Flink 的API层级介绍Source Operator速览

  • Flink的API层级 为流式/批式处理应用程序的开发提供了不同级别的抽象
    • 第一层是最底层的抽象为有状态实时流处理,抽象实现是 Process Function,用于底层处理
    • 第二层抽象是 Core APIs,许多应用程序不需要使用到上述最底层抽象的 API,而是使用 Core APIs 进行开发
      • 例如各种形式的用户自定义转换(transformations)、联接(joins)、聚合(aggregations)、窗口(windows)和状态(state)操作等,此层 API 中处理的数据类型在每种编程语言中都有其对应的类。
    • 第三层抽象是 Table API。 是以表Table为中心的声明式编程API,Table API 使用起来很简洁但是表达能力差
      • 类似数据库中关系模型中的操作,比如 select、project、join、group-by 和 aggregate 等
      • 允许用户在编写应用程序时将 Table API 与 DataStream/DataSet API 混合使用
    • 第四层最顶层抽象是 SQL,这层程序表达式上都类似于 Table API,但是其程序实现都是 SQL 查询表达式
      • SQL 抽象与 Table API 抽象之间的关联是非常紧密的

       

    • 注意:Table和SQL层变动多,还在持续发展中,大致知道即可,核心是第一和第二层

玩转Flink里面核心的Source Operator实战——第四课插图

 

  • Flink编程模型
  • Source来源
    • 元素集合
      • env.fromElements
      • env.fromColletion
      • env.fromSequence(start,end);
    • 文件/文件系统
      • env.readTextFile(本地文件);
      • env.readTextFile(HDFS文件);
    • 基于Socket
      • env.socketTextStream("ip", 8888)
    • 自定义Source,实现接口自定义数据源,rich相关的api更丰富
      • 并行度为1
        • SourceFunction
        • RichSourceFunction
      • 并行度大于1
        • ParallelSourceFunction
        • RichParallelSourceFunction
  • Connectors与第三方系统进行对接(用于source或者sink都可以)
    • Flink本身提供Connector例如kafka、RabbitMQ、ES等
    • 注意:Flink程序打包一定要将相应的connetor相关类打包进去,不然就会失败
  • Apache Bahir连接器
    • 里面也有kafka、RabbitMQ、ES的连接器更多

 

  • 总结 和外部系统进行读取写入的
    • 第一种 Flink 里面预定义的 source 和 sink。
    • 第二种 Flink 内部也提供部分 Boundled connectors。
    • 第三种是第三方 Apache Bahir 项目中的连接器。
    • 第四种是通过异步 IO 方式
      • 异步I/O是Flink提供的非常底层的与外部系统交互

二、Flink 预定义的Source 数据源 案例实战

  • Source来源
    • 元素集合
      • env.fromElements
      • env.fromColletion
      • env.fromSequence(start,end);

代码实战

点击查看完整内容

控制台输出

点击查看完整内容

三、Flink自定义的Source 数据源案例-订单来源实战

  • 自定义Source,实现接口自定义数据源
    • 并行度为1
      • SourceFunction
      • RichSourceFunction
    • 并行度大于1
      • ParallelSourceFunction
      • RichParallelSourceFunction
    • Rich相关的api更丰富,多了Open、Close方法,用于初始化连接等

VideoOrderSource

点击查看完整内容

VideoOrder

点击查看完整内容

Flink04CustomSourceApp

点击查看完整内容

我们也可以过滤一下数据,比如过滤金额小于5的

代码如下

        DataStream<VideoOrder> filterDS = videoOrderDS.filter(new FilterFunction<VideoOrder>() {
            @Override
            public boolean filter(VideoOrder videoOrder) throws Exception {
                return videoOrder.getMoney() < 5;
            }
        }).setParallelism(3);

        filterDS.print().setParallelism(4);

控制台输出

玩转Flink里面核心的Source Operator实战——第四课插图2

发表评论 取消回复
表情 图片 链接 代码

分享