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。