从零开始快速构建自己的Flink应用

本文介绍如何在 mac 下快速构建属于自己的 Flink 应用。

在 mac 上使用homebrew安装 flink:

bash 复制代码
brew install apache-flink

查看安装的位置:

bash 复制代码
brew info apache-flink

进入安装目录,启动 flink 集群:

bash 复制代码
cd /usr/local/Cellar/apache-flink/1.18.0
./libexec/bin/start-cluster.sh

进入 web 页面:http://localhost:8081/

2. 构建项目

基于模板直接构建一个项目:

bash 复制代码
curl https://flink.apache.org/q/quickstart.sh | bash -s 1.18.0
cd quickstart

在项目的 DataStreamJob 类实现如下计数的功能:

java 复制代码
package org.myorg.quickstart;

import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.util.Collector;

public class DataStreamJob {
    public static void main(String[] args) throws Exception {
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

        env.socketTextStream("127.0.0.1", 9000)
        .flatMap(new LineSplitter())
        .keyBy(0)
        .sum(1)
        .print();

        env.execute("WordCount");
    }

    public static final class LineSplitter implements FlatMapFunction<String, Tuple2<String, Integer>> {
        @Override
        public void flatMap(String s, Collector<Tuple2<String, Integer>> collector) {
            String[] tokens = s.toLowerCase().split("\\W+");

            for (String token : tokens) {
                if (token.length() > 0) {
                    collector.collect(new Tuple2<>(token, 1));
                }
            }
        }
    }
}

在上面的例子中,我们使用 DataStream API 构建了一个 Flink 应用,数据源(source)为本地的 socket 9000 端口,经过 flatMap、keyBy、sum 三个转换操作之后,最后打印到标准输出流。整体流程如下图:

3. 运行

启动 socket 连接,监听 9000 端口:

yaml 复制代码
nc -l 9000

打包,上传(可以使用 Web UI 界面上传,也可以使用命令行上传)。

上传后,就可以在 WebUI 看到正在运行的 job 了。

此时通过在 socket 输入内容,

就可以在 task manager 的 stdout 看到打印结果了。

4. 总结

本文从零开始在本地构建运行了一个 Flink 应用,包括 Flink 集群的安装、Flink 应用的构建,以及 Flink 应用的运行。

相关推荐
AvatarAI_Walker13 分钟前
2026年7月安徽本地健康IP孵化行业观察:不同需求下的服务方向梳理
大数据·网络·tcp/ip·搜索引擎·精选
xlrqx14 分钟前
2026年平顶山家电清洗培训设备是否齐全依据多因素来判断
大数据·python
Georgeviewer7 小时前
商业落地评测|实体门店GEO优化性价比与服务体系深度复盘
大数据·人工智能
腻害兔9 小时前
【若依项目-产品经理视角】深度拆解 RuoYi-Vue-Pro 商城模块:从商品管理到交易引擎,50 张表撑起一整套电商系统
java·大数据·vue.js·产品经理·ai编程
GIR1239 小时前
官方出品 | 多通道土壤呼吸测量系统市场现状与十五五规划深度报告:行业分析+趋势预测全收录
大数据·人工智能·机器学习
南讯股份Nascent11 小时前
洽洽全域会员项目启动会圆满召开
大数据·人工智能
大郭鹏宇11 小时前
基于 LangGraph 构建智能分诊系统(一):项目概述与环境搭建
大数据·人工智能·microsoft·langchain
天天爱吃肉821814 小时前
【电源拆解:跟着问答逐一认识开关适配器PCB元器件】
大数据·人工智能·python·功能测试·嵌入式硬件·汽车
Elastic 中国社区官方博客15 小时前
将你的 Grafana Kubernetes 仪表板迁移到 Elastic Observability:相同的 PromQL,30 倍更快的查询
大数据·人工智能·elasticsearch·搜索引擎·容器·kubernetes·grafana
abcy07121315 小时前
storm核心实时机制
大数据·storm