- Flink内核原理与实现
- 冯飞 崔鹏云 陈冠华编著
- 467字
- 2021-04-14 11:30:37
3.7 连接器
连接器在Flink中叫作Connector。Flink本身是计算引擎,并不提供数据存储能力,所以需要访问外部数据,外部数据源类型繁多,连接器因此应运而生,它提供了从数据源读取数据和写入数据的能力。基于SourceFunction和SinkFunction构建出了种类繁多的连接器。
Flink在Flink-Connectors模块中提供了内置的Connector,包含常见的数据源,如HDFS、Kafka、HBase等,同时结合Source & SinkFunction体系也能够自定义连接器。也有一部分第三方实现的连接器,如GitHub的Bahir项目。
1.流内置连接器(见表3-1)
表3-1 Flink流内置连接器
![](https://epubservercos.yuewen.com/AB30C5/19773741101350906/epubprivate/OEBPS/Images/74_02.jpg?sign=1739427042-vkm6IfsjtN3GF8XpNvnns5TlOCPiKw5P-0-533636829ce25868d6b0feb0364fe6a0)
2. Bahir连接器(见表3-2)
表3-2 Bahir提供的连接器
![](https://epubservercos.yuewen.com/AB30C5/19773741101350906/epubprivate/OEBPS/Images/75_01.jpg?sign=1739427042-rw9UZ8BdTGU1AvuWGiQGh1Ed4EEZJRIf-0-370d51c5195bff7aed57d3a1a38d791f)
连接器中有两个关键行为,即读取和写入,分别对应Flink中的SourceFunction和SinkFunction。根据外部存储类型的不同,实现逻辑各不相同。
下面以KafkaConnector为例说明连接器是如何构建和运转的。
Kafka是一个分布式的高性能消息队列,是流计算中最常用的数据存储。Kafka在概念上与传统的消息中间件类似,有Topic、消费者、生产者。Kafka使用了专有的通信协议,所以Kafka提供了Consumer类库用来从Kafka集群中消费数据,提供了Producer类库用来向Kafka集群写入数据,如图3-37所示。
![](https://epubservercos.yuewen.com/AB30C5/19773741101350906/epubprivate/OEBPS/Images/75_02.jpg?sign=1739427042-huctviesunpsZHGxLx1An8qH8WYs07VJ-0-ef7ed5899f8172bc418ed5abf77fa207)
图3-37 Kafka连接器与Kafka集群交互
图3-37中,Kafka连接器使用SinkFunction向Kafka集群的Topic写入数据,SinkFunction中使用了Kafka的Producer。使用SourceFunction从Kafka集群读取数据,SourceFunction的实现中使用了KafkaConsumerProducer。