Apache Flink 的三种作业模式解析

Apache Flink 是一个强大的流处理引擎,支持多种作业模式以满足不同场景的需求。下面我们将介绍 Flink 的三种常见作业模式:Zeppelin 模式Jar 模式SQL 模式

Zeppelin 模式

特点

  • 交互式开发环境:Zeppelin 模式利用 Apache Zeppelin 提供的交互式开发环境,支持多种语言,包括 Scala、PyFlink 和 SQL
  • 可视化结果展示:它允许用户在 Zeppelin Notebook 中直接编写和执行 Flink 任务,支持流式和批处理 SQL

适用场景

  • 快速开发和测试:适合数据分析师和业务人员,因为它提供了可视化的结果展示和交互式开发体验
  • 数据分析:特别适合快速探索数据、验证想法和进行初步分析

示例代码

在 Zeppelin 中使用 Flink SQL 可以非常方便地进行数据分析。例如,创建一个简单的 Flink SQL 任务:

sql 复制代码
%flink.ssql
CREATE TABLE source_table (
    id INT,
    name STRING
) WITH (
    'connector.type' = 'filesystem',
    'format.type' = 'csv',
    'path' = '/path/to/data'
);

CREATE TABLE sink_table (
    id INT,
    name STRING
) WITH (
    'connector.type' = 'filesystem',
    'format.type' = 'csv',
    'path' = '/path/to/output'
);

INSERT INTO sink_table
SELECT id, name FROM source_table;

Jar 模式

特点

  • 高灵活性和控制力:Jar 模式需要将 Flink 应用程序打包成 Jar 文件,然后通过命令行或其他工具提交到集群执行
  • 复杂任务支持:适合复杂的流处理和批处理任务,支持多种部署模式,如 YARN 和 Kubernetes

适用场景

  • 生产环境:适合生产环境下的稳定运行,特别是那些需要高度自定义和优化的任务
  • 大规模部署:支持在大规模集群中运行,能够处理大量数据和高并发请求

示例代码

创建一个简单的 Flink 流处理任务:

java 复制代码
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;

public class SimpleFlinkJob {
    public static void main(String[] args) throws Exception {
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        
        DataStream<String> text = env.addSource(new SocketTextStreamFunction("localhost", 9999));
        
        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);
                }
            })
            .keyBy(0)
            .sum(1);
        
        counts.print();
        
        env.execute();
    }
}

SQL 模式

特点

  • 统一语义:SQL 模式主要使用 Flink SQL 进行数据处理,提供了统一的批处理和流处理语义
  • 易用性:易于使用和维护,特别适合快速开发和数据分析

适用场景

  • 快速开发和数据分析:适合快速开发、数据分析和 ETL 任务
  • 实时数据处理:特别适合实时数据分析、统计计算和报表生成等场景

示例代码

使用 Flink SQL 进行实时数据统计:

sql 复制代码
%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'
);

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'
);

INSERT INTO sink_table
SELECT id, name, COUNT(*) AS count
FROM source_table
GROUP BY id, name;

综上所述,Zeppelin 模式适合交互式开发和快速测试,Jar 模式适合生产环境下的稳定运行和复杂任务,SQL 模式适合快速开发和数据分析。每种模式都有其特点和适用场景,选择合适的模式可以提高开发效率和系统性能。

相关推荐
青鱼入云3 分钟前
【面试场景题】支付&金融系统与普通业务系统的一些技术和架构上的区别
面试·金融·架构
风象南15 分钟前
SpringBoot Jar包冲突在线检测
后端
掘金安东尼15 分钟前
黑客劫持:周下载量超20+亿的NPM包被攻击
前端·javascript·面试
程序员爱钓鱼17 分钟前
Go语言实战案例 — 项目实战篇:任务待办清单 Web 应用
后端·google·go
Cyan_RA92 小时前
SpringMVC @RequestMapping的使用演示和细节 详解
java·开发语言·后端·spring·mvc·ssm·springmvc
在未来等你5 小时前
Elasticsearch面试精讲 Day 17:查询性能调优实践
大数据·分布式·elasticsearch·搜索引擎·面试
围巾哥萧尘10 小时前
美式审美的商务头像照🧣
面试
用户214118326360211 小时前
Qwen3-Coder 实战!历史人物短视频一键生成,多分镜人物不崩,魔搭直接玩
后端
追逐时光者11 小时前
C#/.NET/.NET Core技术前沿周刊 | 第 54 期(2025年9.8-9.14)
后端·.net
追逐时光者11 小时前
C#/.NET/.NET Core编程技巧练习集,配套详细的文章教程讲解!
后端·.net