Flink 1.12.0学习与分享(pyflink)

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

Flink 1.12.0学习与分享

1. 大数据实时计算引擎历史

  1. 第一代, 以Storm为代表, 高吞吐,低延迟,但精确一次消费以及开发维护便捷性,生态完善度等相对欠缺一些.
  2. 第二代,以Spark 为代表, 高吞吐, 牺牲了一些延迟(微批次理念), 结合第三方框架, 可以很好实现精确一次消费. 开发维护便捷性, 生态完善度都非常好.
  3. 第三代, 以Flink为代表, 设计时就以实时计算为出发点, 高吞吐,低延迟,精确一次消费语义支持, 开发维护便捷性, 生态完善度都非常好

生态完善度:
各类编程语言支持, SQL支持, 和其他大数据框架集成如Hadoop, 消息队列如Kafka, Hive, Hbase, Mysql, 监控体系等等

2. Flink是什么

  1. 在无界和有界数据流上进行状态计算的框架和分布式处理引擎。 Flink 已经可以在所有常见的集群环境中运行,并以 in-memory 的速度和任意的规模进行计算.

注意, 在大数据计算引擎,最典型是mapreduce(计算中间结果会大量落地磁盘, 性能较慢, 但很稳定)
后续的Spark, 除了shuffle时会落地磁盘,其他场景不会, 这样尽可能将中间结果放在内存, 计算会快很多,因为减少了和磁盘IO的性能消耗
再后续的Flink, 以及OLAP领域的内存计算引擎如Impala, Presto等都尽可能在计算时不做磁盘IO(并不是没有磁盘IO). 这样就很好利用了内存的高速存储特性, 极大提升了数据计算性能.–同样的, 不稳定性以及对硬件高配置要求也自然而然发生, 这是需要实际开发时特别注意的.

  1. 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进行封装.

  1. Flink 模块和架构层级设计
    在这里插入图片描述

注意, Gelly, FlinkML, CEP等模块并没有包括在Flink内部,开发时, 需要在pom文件中引入, 框架本身集成也需要做处理. 这一点和Spark框架是一致的, 提供出来的包是最小化功能, 需要其他功能再进一步扩展集成即可.

对照一下Spark的模块划分
在这里插入图片描述

  1. Flink 发布渠道
  1. Apache Bahir 官网
  2. Ververica 官网
  3. Flink 官网 官网
  4. Maven
  5. SBT
  6. 等等

注意, Flink是一个开源产品, 为了降低Flink开发中项目规模, Flink将很多模块拆分出来,也利用了开源社区很多现有模块如Zookeeper, Calcite等

3. Flink如何安装

环境要求:

  1. Java 8
  2. Flink发布包 官网下载
  3. 尽可能是Linux, Mac os等操作系统环境
  1. local模式安装
  1. 下载Flink 的安装包, 解压缩到自己的安装目录下
  2. 在Flink安装目录的bin目录下,调用
# 启动
bin/start-cluster.sh

# 关闭
bin/stop-cluster.sh
  1. 集群部署
  1. 3种模式(https://ci.apache.org/projects/flink/flink-docs-release-1.12/deployment/)
  1. Application Mode,
  2. Per-Job Mode,
  3. Session Mode.
  1. 参考博客
  1. https://blog.csdn.net/qq_38058332/article/details/108227900
  2. https://www.jianshu.com/p/1b05202c4fb6
  1. 容器化集群部署

同样的模式,但需要使用K8s和docker技术,这也是被阿里巴巴验证实际可行并且支撑业务发展的方式

  1. 安装目录简介
    在这里插入图片描述

经典的文件目录命名
bin, 可执行文件目录
在这里插入图片描述

conf, 配置文件所在
在这里插入图片描述

examples, 演示案例(入门是足够的,但对比实际开发还是需要去github上寻找更多案例代码学习)
在这里插入图片描述

lib, 第三方依赖
在这里插入图片描述

log, 日志所在在这里插入图片描述

opt, 第三方可选依赖所在
在这里插入图片描述

plugins, 第三方插件支持, 如对GPU, FPGA等的支持在这里插入图片描述

另, 因为Flink本身属于美国Apache基金会旗下开源项目,是受到美国出口管制的, 从法律上来说, 美国政府可以要求禁止Apache向中国出口Flink,虽然是开源的,免费的.
在这里插入图片描述

4. Flink如何使用

4.1 Table&SQL API

  1. 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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值