前言
结合官网文档和自定义实现一个flink-http-connector,来学习总结Flink用户自定义连接器(Table API Connectors)。
背景
前段时间有个需求:需要Flink查询API接口,将返回的数据转为Flink Table,然后基于Table进行后面的计算。这个需求可以写Flink代码实现:使用HttpClient API请求接口返回数据,然后将返回的数据转为DataStream,最后再将DataStream转为Table。我想了一下是不是可以通过SQL的形式实现这种需求,于是在网上查了一下,还真有。Star比较多的项目:https://github.com/getindata/flink-http-connector.git,但是它要求Java 11,并且它的Http Source只支持Lookup Joins,限制太多,并不能满足我的需求。所以最终又尝试学习了自己写自定义的Table API Connectors,这样可以比较灵活的实现需求。
官网文档
官网文档地址:https://nightlies.apache.org/flink/flink-docs-release-1.17/zh/docs/dev/table/sourcessinks/,官网文档详细介绍了自定义连接器的概念、扩展点并给出了一个完整的代码实例,实例实现了自定义socket连接器。本文摘录一部分官方文档,便于自己理解。
动态表是 Flink Table & SQL API的核心概念,用于统一有界和无界数据的处理。
动态表只是一个逻辑概念,因此 Flink 并不拥有数据。相应的,动态表的内容存储在外部系统( 如数据库、键值存储、消息队列 )或文件中。
动态 sources 和动态 sinks 可用于从外部系统读取数据和向外部系统写入数据。在文档中,sources 和 sinks 常在术语连接器 下进行总结。
Flink 为 Kafka、Hive 和不同的文件系统提供了预定义的连接器。有关内置 table sources 和 sinks 的更多信息,请参阅连接器部分:https://nightlies.apache.org/flink/flink-docs-release-1.17/zh/docs/connectors/table/overview/
more >>