flink mysql connector_如何正确使用 Flink Connector?

简介: 本文主要分享 Flink connector 相关内容,分为以下三个部分的内容:第一部分会首先介绍一下 Flink Connector 有哪些。第二部分会重点介绍在生产环境中经常使用的 kafka connector 的基本的原理以及使用方法。第三部分答疑,对社区反馈的问题进行答疑。

(因为内容较多,进行了文章删减,阅读全文可以通过“点击这里”进行浏览)

文章摘自:阿里云开发者社区

Flink Streaming Connector

Flink 是新一代流批统一的计算引擎,它需要从不同的第三方存储引擎中把数据读过来,进行处理,然后再写出到另外的存储引擎中。Connector 的作用就相当于一个连接器,连接 Flink 计算引擎跟外界存储系统。Flink 里有以下几种方式,当然也不限于这几种方式可以跟外界进行数据交换:第一种 Flink 里面预定义了一些 source 和 sink。

第二种 Flink 内部也提供了一些 Boundled connectors。

第三种可以使用第三方 Apache Bahir 项目中提供的连接器。

第四种是通过异步 IO 方式。

下面分别简单介绍一下这四种数据读写的方式。

1.预定义的 source 和 sink

Flink 里预定义了一部分 source 和 sink。在这里分了几类。

基于文件的 source 和 sink。

如果要从文本文件中读取数据,可以直接使用:

env.readTextFile(path)

就可以以文本的形式读取该文件中的内容。当然也可以使用:

env.readFile(fileInputFormat, path)

根据指定的 fileInputFormat 格式读取文件中的内容。

如果数据在 Flink 内进行了一系列的计算,想把结果写出到文件里,也可以直接使用内部预定义的一些 sink,比如将结果已文本或 csv 格式写出到文件中,可以使用 DataStream 的 writeAsText(path) 和 writeAsCsv(path)。基于 Socket 的 Source 和 Sink

提供 Socket 的 host name 及 port,可以直接用 StreamExecutionEnvironment 预定的接口 socketTextStream 创建基于 Socket 的 source,从该 socket 中以文本的形式读取数据。当然如果想把结果写出到另外一个 Socket,也可以直接调用 DataStream writeToSocket。基于内存 Collections、Iterators 的 Source

可以直接基于内存中的集合或者迭代器,调用 StreamExecutionEnvironment fromCollection、fromElements 构建相应的 source。结果数据也可以直接 print、printToError 的方式写出到标准输出或标准错误。

详细也可以参考 Flink 源码中提供的一些相对应的 Examples 来查看异常预定义 source 和 sink 的使用方法,例如 WordCount、SocketWindowWordCount。

2.Bundled Connectors

Flink 里已经提供了一些绑定的 Connector,例如 kafka source 和 sink,Es sink等。读写 kafka、es、rabbitMQ 时可以直接使用相应 connector 的 api 即可。第二部分会详细介绍生产环境中最常用的 kafka connector。

虽然该部分是 Flink 项目源代码里的一部分,但是真正意义上不算作 Flink 引擎相关逻辑,并且该部分没有打包在二进制的发布包里面。所以在提交 Job 时候需要注意, job 代码 jar 包中一定要将相应的 connetor 相关类打包进去,否则在提交作业时就会失败,提示找不到相应的类,或初始化某些类异常。

3.Apache Bahir 中的连接器

Apache Bahir 最初是从 Apache Spark 中独立出来项目提供,以提供不限于 Spark 相关的扩展/插件、连接器和其他可插入组件的实现。通过提供多样化的流连接器(streaming connectors)和 SQL 数据源扩展分析平台的覆盖面。如有需要写到 flume、redis 的需求的话,可以使用该项目提供的 connector。

4.Async I/O

流计算中经常需要与外部存储系统交互,比如需要关联 MySQL 中的某个表。一般来说,如果用同步 I/O 的方式,会造成系统中出现大的等待时间,影响吞吐和延迟。为了解决这个问题,异步 I/O 可以并发处理多个请求,提高吞吐,减少延迟。

Tips:Async 的原理可参考官方文档

Flink Kafka Connector

本章重点介绍生产环境中最常用到的 Flink kafka connector。使用 Flink 的同学,一定会很熟悉 kafka,它是一个分布式的、分区的、多副本的、 支持高吞吐的、发布订阅消息系统。生产环境环境中也经常会跟 kafka 进行一些数据的交换,比如利用 kafka consumer 读取数据,然后进行一系列的处理之后,再将结果写出到 kafka 中。这里会主要分两个部分进行介绍,一是 Flink kafka Consumer,一个是 Flink kafka Producer。

首先看一个例子来串联下 Flink kafka connector。代码逻辑里主要是从 kafka 里读数据,然后做简单的处理,再写回到 kafka 中。

分别用红框框出如何构造一个 Source sink Function。Flink 提供了现成的构造FlinkKafkaConsumer、Producer 的接口,可以直接使用。这里需要注意,因为 kafka 有多个版本,多个版本之间的接口协议会不同。Flink 针对不同版本的 kafka 有相应的版本的 Consumer 和 Producer。例如:针对 08、09、10、11 版本,Flink 对应的 consumer 分别是 FlinkKafkaConsumer 08、09、010、011,producer 也是。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值