一.预定义的源和接收器
Flink内置了一些基本数据源和接收器,它们始终可用。该预定义的数据源包括文件,目录和Socket,并可以加载集合和迭代器的数据。该预定义的数据接收器支持写入文件,输出信息和异常。
二.捆绑式连接器
连接器提供用于与各种第三方系统接口的代码。当前支持以下系统:
- Apache Kafka(源/接收器)
- Apache Cassandra(接收器)
- Amazon Kinesis Streams(源/接收器)
- Elasticsearch(接收器)
- Hadoop文件系统(接收器)
- RabbitMQ(源/接收器)
- Apache NiFi(源/接收器)
- Twitter Streaming API(源)
- Google PubSub(源/接收器)
请记住,要在应用程序中使用这些连接器之一,通常需要其他第三方组件,例如,用于数据存储或消息队列的服务器。还请注意,列出的流连接器是Flink项目的一部分,幷包含在源代码版本中,但它们不包含在二进制发行版中。
三.Apache Bahir中的连接器
通过Apache Bahir发布了用于Flink的其他流连接器,包括:
- Apache ActiveMQ(源/接收器)
- Apache Flume(接收器)
- Redis(接收器)
- Akka(接收器)
- Netty(源)
四.连接到Flink的其他方式
1.通过异步I/O进行数据获取
使用连接器不是Flink获取数据和输出数据的唯一方法。一个常见的模式是查询外部数据库或Web服务获取数据为一个Map或FlatMap 作为主要数据流的补充。Flink提供了一个用于异步I/O的API, 以使其更容易有效且强大地完成这种扩充。
2.可查询状态
当Flink应用程序将大量数据推送到外部数据存储时,这可能会成为I/O瓶颈。如果涉及的数据的读取次数少于写入的次数,则更好的方法是让外部应用程序从Flink中提取所需的数据。在可查询的状态界面,允许通过Flink管理的状态下进行按需查询。
五.数据源和接收器的容错保证
Flink的容错机制在出现故障时恢复程序并继续执行它们。此类故障包括机器硬件故障,网络故障,瞬时程序故障等。
仅当源参与快照机制时,Flink才能保证将一次准确的状态更新为用户定义的状态。下表列出了Flink和捆绑的连接器的状态更新保证。
为了保证端到端的一次精确记录传递(除了一次精确的状态语义),数据接收器需要参与检查点机制。下表列出了Flink以及捆绑的接收器的交付保证(假设仅一次状态更新):
备注:
- exactly ones:精准一次
- at most ones:最多一次
- at least ones:最少一次