实时数据开发|Flink如何实现不同数据源输入--DataSource模块

DataStream 编程模型

Flink定义DataStream API让用户灵活且高效的编写流式应用。主要分为3部分:DataSource模块,Transformation模块以及DataSink模块。

  1. DataSource模块,主要定义了数据接入功能,将外部数据接入至flink,并将接入数据转换成对应的datastream数据集。
  2. Transformation 模块定义了对 DataStream 数据集的各种转换操作,例如进行 map、filter、windows等操作。
  3. 最后,将结果数据通过Datasink模块写出到外部存储介质中,例如将数据输出到文件或Kaka消息中间件等。

今天主要讲DataSources:

DataSources数据输入

DataSources 模块定义了DataStream API中的数据输人操作,Flink将数据源主要分为的内置数据源和第三方数据源两种类型。其中内置数据源包含文件、Socket网络端口以及集合类型数据 ,其不需要引人其他依赖库,且在Flink系统内部已经实现,用户可以直接调用相关方法使用。第三方数据源定义了Flink和外部系统数据交互的逻辑,包括数据的读写接口。在Flink中定义了非常丰富的第三方数据源连接器(Connector),例如Apache kafka Connector、Elatic Search Connector等。同时用户也可以自定义实现Flink中数据接人函数 SourceFunction,并封装成第三方数据源的Connector,完成Flink与其他外部系统的数据交互。

内置数据源

  1. 文件数据源:flink支持将文件内容读取到系统中,并转换成分布式数据集DataStream 进行数据处理。readFile时可以指定文件读取类型(WatchType),检测文件变换时间间隔(interval)、文件路径过滤条件(FilePathFilter)等参数。watchtype分为PROCESS_CONTINUOUSLY和PROCESS_ONCE模式,前置检测到文件内容变化会加载全部内容到Flink;而后者只加载变化的数据,即数据只被读取、处理一次 。因此后一种方式才能保证Exactly Once级别的数据一致性保障
  2. Socket数据源:参数为IP地址和端口。
  3. 集合数据源:Flink可以直接将集合类(collection)转换成datastream数据集,本质上是将本地集合中的数据分发到远端并行执行的节点中。注意集合内的数据结构需要一致,否则可能出现数据转换异常。

外部数据源

  1. 数据源连接器
    前面提到的数据源类型都是些基本的数据接人方式,其实质是实现了不同的SourceFuncion,Fink将其封装成高级API,减少用户的使用成本。
    对于流式计算类型的应用,数据大部分都是从外部第三方系统中获取。Flink定义了非常丰富的第三方数据连接器:
  • 其中部分连接器是仅支持读取数据,例如Netty等;
  • 一部分仅支持数据输出(Sink):Elasticsearch、Hadoop FileSystem等。
  • 还有一部分是支持数据输入和输出:例如 Apache Kafka、Amazon Kinesis连接器。例如kafka connector中使用的主要参数有:kafka topic、bootstrap.servers、zookeeper.connect。
  1. 自定义数据源连接器。可以通过实现SourceFunction定义单个 现成的接入的数据接入其,也可以实现parallelSourceFunction接口定义并发数据源接入器。
相关推荐
最初的↘那颗心37 分钟前
Flink Stream API 源码走读 - window 和 sum
大数据·hadoop·flink·源码·实时计算·窗口函数
青云交13 小时前
Java 大视界 -- 基于 Java 的大数据可视化在城市交通拥堵治理与出行效率提升中的应用(398)
java·大数据·flink·大数据可视化·拥堵预测·城市交通治理·实时热力图
还是大剑师兰特19 小时前
Flink面试题及详细答案100道(1-20)- 基础概念与架构
大数据·flink·大剑师·flink面试题
sleetdream1 天前
Flink Sql 按分钟或日期统计数据量
sql·flink
阿Paul果奶ooo2 天前
Flink中基于时间的合流--双流联结(join)
大数据·flink
Direction_Wind2 天前
Flinksql bug: Heartbeat of TaskManager with id container_XXX timed out.
大数据·flink·bug
最初的↘那颗心2 天前
Java 泛型类型擦除
java·flink
最初的↘那颗心3 天前
Flink Stream API 源码走读 - socketTextStream
大数据·flink
都叫我大帅哥3 天前
Flink Slot 终极指南:从入门到避坑,幽默解析分布式计算的“工位经济学
java·大数据·flink
阿Paul果奶ooo4 天前
Flink概述
大数据·flink