介绍一下什么是Apache Flink

Apache Flink 是一个开源分布式流处理和批处理框架,用于对无界和有界数据流执行有状态计算。
它的特点是高吞吐量、低延迟和Exactly-once状态一致性。
核心数据处理特性 Flink 支持两种数据流模式。
流程不受限制:数据持续生成,没有明确的终点(实时传感器数据、用户行为日志等)。
为了保证完整的结果,必须实时处理这些数据并按事件顺序摄取。
Flink通过精确的时间控制和状态管理,保证无限流处理的实时性和准确性。
有界流:数据有明确的开始和结束(批量日志文件、历史数据集等)。
无需严格的顺序即可完整摄取和处理此类数据。
Flink 使用专门针对固定数据集设计的算法来优化批处理性能并支持排序等操作。
分布式部署和资源管理 Flink 作为分布式系统,与 HadoopYARN、ApacheMesos、Kubernetes 等主流集群资源管理器无缝集成,也可以独立运行。
其部署模型可容纳各种资源管理器功能,并通过 REST 接口简化通信和集成。
当应用程序提交时,Flink会根据配置的并行度自动分配资源,并在发生故障时动态替换故障节点,以保证高可用性。
大规模操作和状态管理 Flink 旨在支持任何规模的有状态流应用程序。
应用程序被划分为数千个并行任务,以充分利用集群的CPU、内存、磁盘和网络资源。
其异步增量检查点算法最大限度地减少处理延迟,同时确保一次性状态一致性。
在现实应用中,Flink 可以处理数万亿个日常事件,维护 TB 级的状态,并在数千个核心上稳定运行。
优化内存性能:Flink 程序状态最初存储在内存中,超出限制时使用高效的磁盘结构。
所有计算都是基于本地状态(通常在内存中)执行,这显着减少了延迟。
在灾难恢复期间,通过定期异步持久化状态来确保数据一致性,而不影响主处理流程。
这样的设计让Flink能够在实时场景下兼顾高性能和可靠性。

Apache Flink 1.9重磅发布!首次合并阿里内部版本Blink重要功能

Apache Flink 1 .9 首次包含阿里巴巴内部版本 Blink 的重要功能,包括批量作业的批量恢复、基于 Blink 的 TableAPI 和新的 SQL 查询引擎(预览版)、StateProcessorAPI、重新设计的 WebUI、新的 PythonTableAPI(预览版)以及与 Apache Hive 生态系统的集成(预览版)。
具体介绍如下: 批量作业的批量恢复 功能描述:批量作业(Dataset、TableAPI、SQL)从作业失败中恢复的时间显着缩短。
在Flink1 .9 之前,批量作业中的任务失败是通过取消所有任务并重新启动整个作业来恢复的,即作业从头开始,所有进度都被丢弃。
在此版本中,Flink 将中间结果保留在 Network Shuffle 的边缘,并仅使用此数据来恢复受故障影响的任务。
所谓任务的“故障区”是指通过管道方式连接的数据交换方式,它定义了受故障影响的任务的边界。
配置方法:要使用这种新的故障转移策略,必须确保 flink-conf.yaml 中有 jobmanager.execution.failover-strategy:region 配置。
1 .9 版本包中默认包含该配置项,但从之前版本升级时,如果想复用之前的配置,需要手动添加该配置。
效果:“尴尬并行”类型的“区域”失败策略流式传输可以提高作业的恢复速度(没有任何诸如 key() 和重新平衡之类的洗牌的作业)。
在恢复期间,仅需要在受影响的故障区域恢复操作。
对于其他类型的流作业,故障转移行为与以前的版本相同。
基于 Blink(预览版)的 TableAPI 和 SQL 的新查询引擎集成工作:在将 Blink 捐赠给 Apache Flink 后,社区致力于集成 Blink 的 TableAPI 和 SQL 查询优化器和运行时。
首先,Flink-Table单个模块被解构为许多更小的模块,使得Java和Scala API模块、优化器和运行时模块层次清晰、接口明确。
查询处理器:Blink 的规划器已扩展以实现新的优化器接口,现在有两个用于执行 TableAPI 和 SQL 的插件查询处理器:1 .9 之前的 Flink 处理器和新的基于 Blink 的处理器。
基于Blink的查询处理器提供了更好的SQL覆盖率(1 .9 完全支持TPC-H,TPC-DS支持在下一版本的计划中),并通过广泛的查询优化(基于成本的执行计划选择和更多优化规则)、改进的代码生成机制和调整的运算符实现来提高批量查询性能。
此外,还提供了更强大的流处理能力,包括维度表join、topN、去重等新功能,这包括优化聚合场景以减少数据偏差,以及构建更常用的函数。
使用建议:两个查询处理器之间的语义和功能大部分一致,但并不完全一致。
1 .9 之前的 Flink 处理器仍然是 1 .9 版本的默认处理器,建议用于生产设置。
您可以在创建表环境时通过EnvironmentSettings配置启用闪烁处理器。
所选处理器必须位于正在执行的 Java 进程的类路径中。
对于集群设置,默认情况下两个查询处理器都会自动加载到类路径中。
从 IDE 运行查询时,您需要将处理器依赖项显式添加到项目中。
StateProcessorAPI 函数说明:直到 Flink1 .9 ,从外部访问任务的状态仅限于 QueryableState 实验函数。
该版本引入了一个新的、强大的类库,支持基于数据集读取、写入和修改状态快照。
这意味着Flink作业的状态可以通过从外部系统(例如外部数据库)读取数据然后转换为保存点来自主创建;可以使用任何 Flink 批处理 API(数据集、表、SQL)查询保存点中的状态,例如分析相关状态模式或检查状态差异以支持应用程序审计或故障排除;保存点中的状态模式可以离线迁移,而之前的方案只有达到状态后才可以在线迁移;可以识别并纠正保存点中的无效数据。
覆盖范围:新的 StateProcessorAPI 覆盖所有类型的快照:保存点、完整检查点和增量检查点。
茶。
重新设计的WebUI的重构状况:社区讨论了一项使FlinkWebUI现代化的提案,并决定使用Angular的最新稳定版本,从Angular1 .x跳到7 .x,来重建这个组件。
重新设计的UI默认是1 .9 .0版本,但是有一个按钮可以切换到旧版本的webUI。
未来计划:未来不保证旧版本WebUI的功能会对齐,新版本稳定后旧版本WebUI将被彻底移除。
新的 PythonTableAPI(预览版)功能描述:此版本引入了 PythonTableAPI 的第一个版本。
此功能是在 TableAPI 周围设计了一层薄薄的 PythonAPI 包装器,基本上将 PythonTableAPI 方法调用转换为 JavaTableAPI 调用。
Flink1 .9 版本中,PythonTableAPI尚不支持UDF,仅支持标准关系操作。
Python 中的 UDF 支持已列入未来版本的路线图。
如何使用:如果您想尝试新的Python API,您需要手动安装PyFlink。
然后,您可以查看文档中给出的演练并尝试自己弄清楚。
社区目前正在为 pylink 开发一个可以通过 pip 安装的 Python 包。
与 ApacheHive 生态系统集成(预览版) 集成背景:ApacheHive 是 Hadoop 生态系统中广泛使用的一个系统,用于存储和查询大规模结构化数据。
除了作为查询处理器之外,Hive 还有助于管理大型数据集和还提供了一个名为 MetaStore 的目录来组织。
查询处理器的一个常见集成点是与 Hive 的元存储集成,以便能够利用 Hive 管理的数据。
集成功能:社区开始实现 FlinkTable API 和连接到 HiveMetastore for SQL 的外部目录。
在 Flink 1 .9 中,用户可以查询和处理存储在 Hive 中的多种格式的数据。
Hive 集成还包括支持将 Hive 的 UDF 与 FlinkTableAPI/SQL 结合使用。
表持久性:以前,TableAPI/SQL 中定义的表都是临时的。
但是,新的 Catalog 连接器还允许在 Metastore 中持久存储使用 SQLDDL 语句(例如 CREATETABLE、DROPTABLE)创建的表。
这意味着您可以连接到元存储并注册一个表,例如 Kafkatopic 表。
从现在开始,只要目录连接到元存储就可以查询该表。
功能状态:Flink 1 .9 中提供的 Hive 支持仍处于实验阶段。
计划在下一版本中稳定这些功能。