Flink 1.12.0学习与分享
1. 大数据实时计算引擎历史
- 第一代, 以Storm为代表, 高吞吐,低延迟,但精确一次消费以及开发维护便捷性,生态完善度等相对欠缺一些.
- 第二代,以Spark 为代表, 高吞吐, 牺牲了一些延迟(微批次理念), 结合第三方框架, 可以很好实现精确一次消费. 开发维护便捷性, 生态完善度都非常好.
- 第三代, 以Flink为代表, 设计时就以实时计算为出发点, 高吞吐,低延迟,精确一次消费语义支持, 开发维护便捷性, 生态完善度都非常好
生态完善度:
各类编程语言支持, SQL支持, 和其他大数据框架集成如Hadoop, 消息队列如Kafka, Hive, Hbase, Mysql, 监控体系等等
2. Flink是什么
- 在无界和有界数据流上进行状态计算的框架和分布式处理引擎。 Flink 已经可以在所有常见的集群环境中运行,并以 in-memory 的速度和任意的规模进行计算.
注意, 在大数据计算引擎,最典型是mapreduce(计算中间结果会大量落地磁盘, 性能较慢, 但很稳定)
后续的Spark, 除了shuffle时会落地磁盘,其他场景不会, 这样尽可能将中间结果放在内存, 计算会快很多,因为减少了和磁盘IO的性能消耗
再后续的Flink, 以及OLAP领域的内存计算引擎如Impala, Presto等都尽可能在计算时不做磁盘IO(并不是没有磁盘IO). 这样就很好利用了内存的高速存储特性, 极大提升了数据计算性能.–同样的, 不稳定性以及对硬件高配置要求也自然而然发生, 这是需要实际开发时特别注意的.
- API层级设计

注意, 因为Flink本身基于Java和Scala开发, 所以目前各个层级API对这2个语言支持最好也是最快, Python目前最新的1.12支持SQL, Table以及DataStream, 但更底层的Process Function级别还不支持
Spark的API 层级设计也类似, 最底层是RDD(更底层就是各类Function), 再之上有DataSet, DataStream, 基于此之上,有SQL层, Structed Streaming层. 图计算,机器学习,Streaming则是基于RDD进行封装.
- Flink 模块和架构层级设计

注意, Gelly, FlinkML, CEP等模块并没有包括在Flink内部,开发时, 需要在pom文件中引入, 框架本身集成也需要做处理. 这一点和Spark框架是一致的, 提供出来的包是最小化功能, 需要其他功能再进一步扩展集成即可.
对照一下Spark的模块划分
- Flink 发布渠道
注意, Flink是一个开源产品, 为了降低Flink开发中项目规模, Flink将很多模块拆分出来,也利用了开源社区很多现有模块如Zookeeper, Calcite等
3. Flink如何安装
环境要求:
- Java 8
- Flink发布包 官网下载
- 尽可能是Linux, Mac os等操作系统环境
- local模式安装
- 下载Flink 的安装包, 解压缩到自己的安装目录下
- 在Flink安装目录的bin目录下,调用
# 启动
bin/start-cluster.sh
# 关闭
bin/stop-cluster.sh
- 集群部署
- 3种模式(https://ci.apache.org/projects/flink/flink-docs-release-1.12/deployment/)
- Application Mode,
- Per-Job Mode,
- Session Mode.
- 参考博客
- https://blog.csdn.net/qq_38058332/article/details/108227900
- https://www.jianshu.com/p/1b05202c4fb6
- 容器化集群部署
同样的模式,但需要使用K8s和docker技术,这也是被阿里巴巴验证实际可行并且支撑业务发展的方式
- 安装目录简介

经典的文件目录命名
bin, 可执行文件目录
conf, 配置文件所在
examples, 演示案例(入门是足够的,但对比实际开发还是需要去github上寻找更多案例代码学习)
lib, 第三方依赖
log, 日志所在
opt, 第三方可选依赖所在
plugins, 第三方插件支持, 如对GPU, FPGA等的支持
另, 因为Flink本身属于美国Apache基金会旗下开源项目,是受到美国出口管制的, 从法律上来说, 美国政府可以要求禁止Apache向中国出口Flink,虽然是开源的,免费的.
4. Flink如何使用
4.1 Table&SQL API
- wordcount
# coding=utf-8
import os
import shutil
from pyflink.table import BatchTableEnvironment, EnvironmentSettings
from pyflink.table import DataTypes
from pyflink.table.descriptors import Schema, OldCsv, FileSystem
# 批处理模式, 因为blink palnner更加强大,批流都支持sql,特性也更加丰富,官方也推荐使用blink planner
env_set = EnvironmentSettings.new_instance().in_batch_mode().use_blink_planner().build()
env = BatchTableEnvironment.create(environment_settings = env_set)
# 设置python执行环境为python3
env.get_config().set_python_executable("python3")
source_word= '/Users/hulc/PycharmProjects/pyflink_1/com/hajk/wordcount/word.csv'
# os.path.join(os.path.abspath(os.path.dirname(__file__)), 'word.csv')
env.execute_sql("""
CREATE TABLE source(
id BIGINT,
word STRING
) with (
'connector' = 'filesystem',
'path' = '/Users/hulc/PycharmProjects/pyflink_1/com/hajk/wordcount/word.csv',
'format' = 'csv'
)""")
sink_word = '/Users/hulc/PycharmProjects/pyflink_1/com/hajk/wordcount/result.csv'
# os.path.join(os.path.abspath(os.path.dirname(__file__)), 'result.csv')
if os.path.exists(sink_word):
if os.path.isfile(sink_word):
os.remove(sink_word)
else:
shutil.rmtree(sink_word, True)
env.execute_sql("""
CREATE TABLE sink (
word STRING,
cnt BIGINT
) WITH (
'connector' = 'filesystem',
'path' = '/Use

本文介绍了Flink 1.12.0的学习要点,包括大数据实时计算引擎的历史,Flink的特点、安装、使用方法以及内部机制。详细探讨了Flink的Table&SQL API、DataStream和DataSet,强调了Flink的高吞吐、低延迟和精确一次消费语义。此外,还深入讲解了Flink的checkpoint、savepoint、event time和watermark等关键机制,以及集群部署、资源管理和容错机制。









1717

被折叠的 条评论
为什么被折叠?



