Flink内核原理与实现
上QQ阅读APP看书,第一时间看更新

3.7 连接器

连接器在Flink中叫作Connector。Flink本身是计算引擎,并不提供数据存储能力,所以需要访问外部数据,外部数据源类型繁多,连接器因此应运而生,它提供了从数据源读取数据和写入数据的能力。基于SourceFunction和SinkFunction构建出了种类繁多的连接器。

Flink在Flink-Connectors模块中提供了内置的Connector,包含常见的数据源,如HDFS、Kafka、HBase等,同时结合Source & SinkFunction体系也能够自定义连接器。也有一部分第三方实现的连接器,如GitHub的Bahir项目。

1.流内置连接器见表3-1

表3-1 Flink流内置连接器

2. Bahir连接器见表3-2

表3-2 Bahir提供的连接器

连接器中有两个关键行为,即读取和写入,分别对应Flink中的SourceFunction和SinkFunction。根据外部存储类型的不同,实现逻辑各不相同。

下面以KafkaConnector为例说明连接器是如何构建和运转的。

Kafka是一个分布式的高性能消息队列,是流计算中最常用的数据存储。Kafka在概念上与传统的消息中间件类似,有Topic、消费者、生产者。Kafka使用了专有的通信协议,所以Kafka提供了Consumer类库用来从Kafka集群中消费数据,提供了Producer类库用来向Kafka集群写入数据,如图3-37所示。

图3-37 Kafka连接器与Kafka集群交互

图3-37中,Kafka连接器使用SinkFunction向Kafka集群的Topic写入数据,SinkFunction中使用了Kafka的Producer。使用SourceFunction从Kafka集群读取数据,SourceFunction的实现中使用了KafkaConsumerProducer。