实时计算Flink

应用场景

智能推荐

1、小红书推荐系统

在这里插入图片描述
在这里插入图片描述

实时数仓

什么是实时数仓

数据仓库(Data Warehouse),可简写为DW或DWH,是一个庞大的数据存储集合,通过对各种业务数据进行筛选与整合,生成企业的分析性报告和各类报表,为企业的决策提供支持。实时仓库是基于Storm/Spark(Streaming)/Flink等实时处理框架,构建的具备实时性特征的数据仓库。
在这里插入图片描述

阿里巴巴菜鸟网络实时数仓设计:

在这里插入图片描述

数仓分层处理架构(流式ETL):

ODS -> DWD -> DWS -> ADS

ODS(Operation Data Store):操作数据层, 一般为原始采集数据。
DWD(Data Warehouse Detail) :明细数据层, 对数据经过清洗,也称为DWI。 DWS(Data Warehouse Service):汇总数据层,基于DWD层数据, 整合汇总成分析某一个主题域的服务数据,一般是宽表, 由多个属性关联在一起的表, 比如用户行为日志信息:点赞、评论、收藏等。
ADS(Application Data Store): 应用数据层, 将结果同步至RDS数据库中, 一般做报表呈现使用。
在这里插入图片描述

大数据分析应用

IOT物联网
Internet of things(IOT)

华为Iot数据分析平台架构

在这里插入图片描述

智慧城市

在这里插入图片描述
在这里插入图片描述

金融风控

在这里插入图片描述

电商行业

在这里插入图片描述

Flink快速入门

概述

  • Flink是什么
    Flink是一个面向数据流处理和批处理的分布式开源计算框架。
    在这里插入图片描述

  • 无界流VS有界流
    1) 无界流:有定义流的开始,但没有定义流的结束, 会不停地产生数据,无界流采用的是流处
    理方式。
    2) 有界流:有定义流的开始, 也有定义流的结束, 需要在获取所有数据后再进行计算,有界流
    采用的是批处理方式。

  • 编程模型

在这里插入图片描述
DataSet 一般用来处理有界流数据。
DataStream一般用来处理无界流数据。

案例

环境搭建

pom

		<!-- Flink核心依赖组件 -->
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-walkthrough-common_${scala.binary.version}</artifactId>
            <version>${flink.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-streaming-java_${scala.binary.version}</artifactId>
            <version>${flink.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-clients_${scala.binary.version}</artifactId>
            <version>${flink.version}</version>
        </dependency>

批处理案例

功能: 通过批处理方式,统计日志文件中的异常数量。

public class BatchProcessorApplication {

    public static void main(String[] args) throws Exception {
        // 1. 定义Flink运行环境
        ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();

        // 2. 读取数据源 (日志文件信息)
        DataSource<String>  logData = env.readTextFile("./data/order_info.log");

        // 3. 清洗转换数据
        logData.flatMap(new FlatMapFunction<String, Tuple2<String, Integer>>() {
            @Override
            public void flatMap(String value, Collector<Tuple2<String, Integer>> collector) throws Exception {
                // 1) 根据正则, 提取每行日志的级别
                Pattern pattern = Pattern.compile("\\[main\\](.*?)\\[");
                Matcher matcher = pattern.matcher(value);
                if(matcher.find()) {
                    // 2) 如果匹配符合规则, 放置元组, 输出数据
                    collector.collect(new Tuple2<String, Integer>(matcher.group(1).trim(), 1));
                }
            }
        }).groupBy(0).sum(1).print(); // 4. 根据日志级别, 汇总统计日志级别的次数,打印结果
    }
}

流处理案例

功能: 根据IP统计访问次数

public class StreamProcessorApplication {

    public static void main(String[] args) throws Exception {

        // 1. 创建运行环境
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        // 2. 读取Socket数据源
        DataStreamSource<String> socketStr = env.socketTextStream("flink1", 9911, "\n");
        // 3. 转换处理数据流
        socketStr.flatMap(new FlatMapFunction<String, Tuple2<String, Integer>>() {
            @Override
            public void flatMap(String s, Collector<Tuple2<String, Integer>> collector) throws Exception {
                // 数据的格式: IP API接口信息(分隔符, 采用tab键)
                // 示例:10.10.20.110 getOrder
                String[] arrValue = s.split("\t");
                collector.collect(new Tuple2<String, Integer>(arrValue[0], 1));
            }
        }).keyBy(0).timeWindow(Time.seconds(5)).sum(1).print().setParallelism(1);

        env.execute("accessLog");
    }
}

Flink部署环境

  1. 安装配置JDK8环境
  2. 下载Flink安装包
    https://www.apache.org/dyn/closer.lua/flink/flink-1.11.2/flink-1.11.2-bin-scala_2.11.tgz
  3. 安装配置
    1) 解压
tar -xvf flink-1.11.2-bin-scala_2.11.tgz

2)运行

bin/start-cluster.sh

主节点访问端口:
vi conf/masters:

localhost:8081
  1. 访问控制台
    http://10.10.20.132:8081/#/overview
    在这里插入图片描述
    Available Task Slots: 有效任务槽数量
    对应配置文件: vi conf/flink-conf.yaml
taskmanager.numberOfTaskSlots: 1

TaskManger与JobManager关系
在这里插入图片描述

Flink任务提交

POM文件增加打包插件

<build>
        <plugins>
            <!-- 编译插件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.5.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <!--<encoding>${project.build.sourceEncoding}</encoding>-->
                </configuration>
            </plugin>
            <!-- 打jar包插件(会包含所有依赖) -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>2.3</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <filters>
                                <filter>
                                    <artifact>*:*</artifact>
                                    <excludes>
                                        <!--
                                        zip -d learn_spark.jar META-INF/*.RSA META-INF/*.DSA META-INF/*.SF -->
                                        <exclude>META-INF/*.SF</exclude>
                                        <exclude>META-INF/*.DSA</exclude>
                                        <exclude>META-INF/*.RSA</exclude>
                                    </excludes>
                                </filter>
                            </filters>
                            <transformers>
                                <transformer
                                        implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <!-- 可以设置jar包的入口类(可选) -->
                                    <mainClass>com.wangj.flink.usage.stream.StreamProcessorApplication</mainClass>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

注意,这里不能采用spring-boot-maven-plugin打包插件, 否则flink不能正常识别。

可视化界面提交任务

在这里插入图片描述
运行验证
在TaskManager当中可以查看输出结果。
在这里插入图片描述

命令行

[root@flink1 flink-1.11.2]# bin/flink run -c com.wangj.flink.usage.stream.StreamProcessorApplication examples/flink- usage-1.0-SNAPSHOT.jar 
Job has been submitted with JobID 4c127f68f6683e5a9342410d7b6540db
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值