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)
相关推荐
Edingbrugh.南空21 小时前
Flink ClickHouse 连接器数据读取源码深度解析
java·clickhouse·flink
Edingbrugh.南空2 天前
Flink ClickHouse 连接器维表源码深度解析
java·clickhouse·flink
诗旸的技术记录与分享3 天前
Flink-1.19.0源码详解-番外补充3-StreamGraph图
大数据·flink
Edingbrugh.南空3 天前
Flink MySQL CDC 环境配置与验证
mysql·adb·flink
bxlj_jcj4 天前
深入Flink核心概念:解锁大数据流处理的奥秘
大数据·flink
Edingbrugh.南空4 天前
Flink SQLServer CDC 环境配置与验证
数据库·sqlserver·flink
Edingbrugh.南空4 天前
Flink OceanBase CDC 环境配置与验证
大数据·flink·oceanbase
Edingbrugh.南空4 天前
Flink TiDB CDC 环境配置与验证
大数据·flink·tidb
Edingbrugh.南空4 天前
Flink Postgres CDC 环境配置与验证
大数据·flink
lifallen5 天前
Paimon vs. HBase:全链路开销对比
java·大数据·数据结构·数据库·算法·flink·hbase