flink入门程序(一)

Flink中提供了3个组件,包括DataSource、Transformation和DataSink

DataSource:表示数据源组件,主要用来接收数据,目前官网提

供了readTextFile、socketTextStream、fromCollection以及一些第三方的Source。

Transformation:表示算子,主要用来对数据进行处理,比如Map、FlatMap、Filter、Reduce、Aggregation等。

DataSink:表示输出组件,主要用来把计算的结果输出到其他存

储介质中,比如writeAsText以及Kafka、Redis、Elasticsearch

等第三方Sink组件。

因此,想要组装一个Flink Job,至少需要这3个组件。

以下来看一个flink的入门程序

首先项目里面引入依赖

bash 复制代码
        <!--flink集成-->
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-java</artifactId>
            <version>1.13.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-streaming-java_2.11</artifactId>
            <version>1.13.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-clients_2.11</artifactId>
            <version>1.13.1</version>
        </dependency>

在这里我使用的是1.13.1版本

开发 Flink 程序有固定的流程

(1)获得 一个执行环境

(2)加载/创建初始化数据

(3)指定操作数据的 Transaction算子

(4)指定计算好的数据的存放位置

(5)调用 execute()触发执行程序

入门案例:flink从文件中读取数据,并统计word的个数,具体代码如下

bash 复制代码
    public static void main(String[] args) throws Exception{
        //获得执行环境
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        //加载或创建具体数据源
        DataStream<Tuple2<String, Integer>> dataStream =
                 env.readTextFile("C:\\d_disk\\zq_project\\interesting\\src\\main\\resources\\22.txt")
                .flatMap(new Splitter())
                .keyBy(value -> value.f0) //按照元组里面的第一个元素分组
                //.window(TumblingProcessingTimeWindows.of(Time.seconds(5))) //时间窗口
                .sum(1);//按照元组里面的第二个元素求和
        dataStream.print();
        env.execute("wordCount");
    }

    public static class Splitter implements FlatMapFunction<String, Tuple2<String, Integer>> {
        @Override
        public void flatMap(String sentence, Collector<Tuple2<String, Integer>> out) throws Exception {
            //根据空格切割行文本
            for (String word: sentence.split(" ")) {
                //把每个切割后的word放到一个二维元组里面,并计数为1
                out.collect(new Tuple2<String, Integer>(word, 1));
            }
        }
    }

txt文本内容如下

bash 复制代码
apple iphone
orange text
apple orange
dog dog cat pig

控制台打印效果如下

bash 复制代码
1> (cat,1)
5> (orange,1)
7> (apple,1)
2> (text,1)
3> (dog,1)
3> (dog,2)
3> (pig,1)
5> (orange,2)
6> (iphone,1)
7> (apple,2)
相关推荐
ApacheSeaTunnel15 小时前
Apache SeaTunnel Zeta、Flink、Spark 怎么选?底层原理 + 实战对比一次讲透
大数据·flink·spark·开源·数据集成·seatunnel·数据同步
代码匠心16 小时前
从零开始学Flink:状态管理与容错机制
java·大数据·后端·flink·大数据处理
海南java第二人1 天前
Flink动态字符串处理框架:构建灵活可配置的实时数据管道
java·flink
Hello.Reader2 天前
Flink 内存与资源调优从 Process Memory 到 Fine-Grained Resource Management
大数据·flink
王锋(oxwangfeng)2 天前
Apache Flink 在 Kubernetes 上的高效部署与优化实践
flink·kubernetes·apache
Hello.Reader2 天前
Apache Flink 网络 Buffer 调优Debloating 的边界、Buffer 生命周期
大数据·flink·apache
Hello.Reader2 天前
Apache Flink 内存故障排查从 IllegalConfigurationException 到 OOMKilled,一篇把坑踩平的指南
大数据·flink·apache
Hello.Reader3 天前
Flink 自适应批执行(Adaptive Batch Execution)让 Batch 作业“边跑边优化”
大数据·flink·batch
愤怒的苹果ext3 天前
flink-sql-connector-elasticsearch8兼容Flink SQL同步到Elasticsearch8.18.8
sql·flink·es8
CTO Plus技术服务中4 天前
Flink运维与开发教程
大数据·运维·flink