行业资讯 2025年08月6日
0 收藏 0 点赞 839 浏览 3499 个字
摘要 :

文章目录 Zeppelin模式 模式特点 适用场景 示例代码 Jar模式:生产环境的“靠谱伙伴” 模式特点 适用场景 示例代码 SQL模式:快速开发的“利器” 模式特点 适用场景 示……




  • Zeppelin模式
    • 模式特点
    • 适用场景
    • 示例代码
  • Jar模式:生产环境的“靠谱伙伴”
    • 模式特点
    • 适用场景
    • 示例代码
  • SQL模式:快速开发的“利器”
    • 模式特点
    • 适用场景
    • 示例代码

    今天咱就来聊聊Flink的三种常见作业模式:Zeppelin模式、Jar模式和SQL模式,帮大家搞清楚在啥时候该用哪种模式,提高开发效率和系统性能。

    Zeppelin模式

    模式特点

    Zeppelin模式借助Apache Zeppelin这个交互式开发环境来实现。这环境牛在哪呢?它支持好几种语言,像Scala、PyFlink和SQL都不在话下。而且在Zeppelin Notebook里,用户能直接编写和执行Flink任务,不管是流式还是批处理SQL都能搞定,执行完还能可视化展示结果,操作起来特别直观。

    适用场景

    这种模式简直就是为数据分析师和业务人员量身打造的。比如数据分析师想快速探索数据,验证自己脑袋里突然冒出来的想法,或者做个初步分析,Zeppelin模式就能派上大用场。它的交互式开发体验和可视化结果展示,能让你快速看到处理数据的效果,就像在和数据“对话”一样。

    示例代码

    下面这段代码展示了在Zeppelin里用Flink SQL进行数据分析的过程。先创建两个表,一个是数据源表source_table,另一个是结果输出表sink_table,然后把数据源表的数据查询出来插入到结果表中。

    -- 创建数据源表source_table,包含id和name字段,数据从指定路径的CSV文件读取
    %flink.ssql
    CREATE TABLE source_table (
        id INT,
        name STRING
    ) WITH (
        \'connector.type\' = \'filesystem\',
        \'format.type\' = \'csv\',
        \'path\' = \'/path/to/data\'
    );
    -- 创建结果输出表sink_table,结构和source_table类似,数据将输出到指定路径的CSV文件
    CREATE TABLE sink_table (
        id INT,
        name STRING
    ) WITH (
        \'connector.type\' = \'filesystem\',
        \'format.type\' = \'csv\',
        \'path\' = \'/path/to/output\'
    );
    -- 将source_table中的数据查询出来插入到sink_table中
    INSERT INTO sink_table
    SELECT id, name FROM source_table;
    

    Jar模式:生产环境的“靠谱伙伴”

    模式特点

    Jar模式和Zeppelin模式不太一样,它得把Flink应用程序打包成Jar文件,然后通过命令行或者其他工具提交到集群去执行。这种模式的好处是灵活性超高,控制力也强,特别适合处理复杂的流处理和批处理任务。而且它支持好多部署模式,像YARN和Kubernetes都能行,在大规模集群中也能稳定运行。

    适用场景

    生产环境里,要是任务比较复杂,对自定义和优化的要求比较高,Jar模式就再合适不过了。比如说,业务场景很复杂,需要对数据处理过程进行深度定制,那Jar模式就能满足这种需求。而且在大规模部署的情况下,它也能轻松应对大量数据和高并发请求,保证系统稳定运行。

    示例代码

    下面这段Java代码实现了一个简单的Flink流处理任务。从指定的Socket端口读取数据,把每行数据映射成Tuple2类型,再按照第一个字段进行分组,统计每个分组中数据的数量,最后打印结果。

    import org.apache.flink.api.common.functions.MapFunction;
    import org.apache.flink.api.common.typeinfo.TypeInformation;
    import org.apache.flink.api.java.tuple.Tuple2;
    import org.apache.flink.streaming.api.datastream.DataStream;
    import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
    // 简单的Flink作业类
    public class SimpleFlinkJob {
        public static void main(String[] args) throws Exception {
            // 获取流执行环境
            StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
            // 从Socket获取输入流,监听localhost的9999端口
            DataStream<String> text = env.addSource(new SocketTextStreamFunction(\"localhost\", 9999));
            // 对输入数据进行处理,映射成Tuple2类型,第一个字段是原数据,第二个字段是数量1
            DataStream<Tuple2<String, Integer>> counts = text
                .map(new MapFunction<String, Tuple2<String, Integer>>() {
                    @Override
                    public Tuple2<String, Integer> map(String value) throws Exception {
                        return new Tuple2<>(value, 1);
                    }
                })
                // 按照Tuple2的第一个字段进行分组
                .keyBy(0)
                // 对分组后的数据,按照第二个字段进行求和,统计每个分组的数据数量
                .sum(1);
            // 打印统计结果
            counts.print();
            // 执行作业
            env.execute();
        }
    }
    

    SQL模式:快速开发的“利器”

    模式特点

    SQL模式主要靠Flink SQL来处理数据,它最大的优点就是提供了统一的批处理和流处理语义,这意味着不管是处理批量数据还是实时数据,用的都是一套逻辑,学习成本低。而且这种模式特别容易上手,维护起来也方便,对开发速度要求高的项目来说再合适不过了。

    适用场景

    如果你需要快速开发一个数据处理任务,或者做数据分析、ETL(抽取、转换、加载)工作,SQL模式就很靠谱。尤其是在实时数据分析、统计计算和报表生成这些场景里,它能发挥出很大的优势,快速实现功能。

    示例代码

    下面这段Flink SQL代码实现了实时数据统计功能。先创建一个从Kafka主题读取数据的源表source_table,再创建一个将统计结果写入MySQL数据库的目标表sink_table,然后对源表数据进行分组统计,把结果插入到目标表中。

    -- 创建源表source_table,从Kafka主题my_topic读取数据,增加一个表示处理时间的字段ts
    %flink.ssql
    CREATE TABLE source_table (
        id INT,
        name STRING,
        ts AS PROCTIME()
    ) WITH (
        \'connector.type\' = \'kafka\',
        \'topic\' =\'my_topic\',
        \'properties.bootstrap.servers\' = \'localhost:9092\'
    );
    -- 创建目标表sink_table,用于存储统计结果,数据将写入MySQL数据库的指定表
    CREATE TABLE sink_table (
        id INT,
        name STRING,
        count INT
    ) WITH (
        \'connector.type\' = \'jdbc\',
        \'url\' = \'jdbc:mysql://localhost:3306/mydb\',
        \'username\' = \'user\',
        \'password\' = \'password\',
        \'table-name\' =\'my_table\'
    );
    -- 对source_table中的数据按照id和name分组,统计每组数据的数量,并插入到sink_table中
    INSERT INTO sink_table
    SELECT id, name, COUNT(*) AS count
    FROM source_table
    GROUP BY id, name;
    

    Apache Flink的这三种作业模式各有千秋。Zeppelin模式适合交互式开发和快速测试;Jar模式在生产环境和复杂任务处理方面表现出色;SQL模式则是快速开发和数据分析的好帮手。大家在实际开发过程中,根据具体需求选择合适的模式,才能把Flink的能力发挥到极致!

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/10369.html

管理员

相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

988
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

465
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

348
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

456
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

517
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

832
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号