专栏首页米虫的家BigData--分布式流数据流引擎Apache Flink

BigData--分布式流数据流引擎Apache Flink

官网:https://flink.apache.org/

一、Flink的重要特点

1)事件驱动型(Event-driven)

  • 事件驱动的应用程序是一个有状态的应用程序,它从一个或多个事件流接收事件,并通过触发计算、状态更新或外部操作对传入事件作出反应。
  • 事件驱动应用程序是传统应用程序设计的一种发展,它具有分离的计算和数据存储层。在这种体系结构中,应用程序从远程事务数据库读取数据并将其持久化。
  • 相反,事件驱动应用程序基于有状态流处理应用程序。在这个设计中,数据和计算被放在同一个位置,从而产生本地(内存或磁盘)数据访问。容错是通过定期将检查点写入远程持久存储来实现的。下图描述了传统应用程序体系结构与事件驱动应用程序之间的区别。

kafka作为消息队列就是一种典型的事件驱动型应用。

2) 流、批(stream,micro-batching)

Spark中,一切都是批次组成的,离线数据是一个大批次,实时数据是一个个无限的小批次组成的。 Flink中,一切都是由流组成的,离线数据是有界限的流,实时数据是一个没有界限的流,这就是所谓的有界流和无界流。

3)分层API

越顶层越抽象,最高层级的抽象是SQL。 越底层越具体

二、Flink使用(word count)

1、设置pom文件

注意下面的依赖设置,使用的是scala 2.12.x版本,Flink版本为1.10.1

xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>cn.buildworld.flink</groupId>
    <artifactId>FlinkTrain</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-scala_2.12</artifactId>
            <version>1.10.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.flink/flink-streaming-scala -->
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-streaming-scala_2.12</artifactId>
            <version>1.10.1</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <!-- 该插件用于将Scala代码编译成class文件 -->
            <plugin>
                <groupId>net.alchim31.maven</groupId>
                <artifactId>scala-maven-plugin</artifactId>
                <version>4.4.0</version>
                <executions>
                    <execution>
                        <!-- 声明绑定到maven的compile阶段 -->
                        <goals>
                            <goal>compile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.0.0</version>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

2、编写scala代码

1)批处理 wordcount

scala

package cn.buildworld.flink

import org.apache.flink.api.scala.{DataSet, ExecutionEnvironment}
import org.apache.flink.api.scala._

// 批处理的word count
object WordCount {
  def main(args: Array[String]): Unit = {

    //创建一个批处理的执行环境
    val env: ExecutionEnvironment = ExecutionEnvironment.getExecutionEnvironment

    //从文件中读取数据
    val inputPath = "D:\\Java\\project\\Scala\\FlinkTrain\\src\\main\\resources\\hello.txt"

    val dataSet: DataSet[String] = env.readTextFile(inputPath)

    // 对数据进行转换处理统计,先分词,再按照word进行分组,最后进行聚合统计

    val resultDataSet: DataSet[(String, Int)] = dataSet
      .flatMap(_.split(" "))
      .map((_, 1))
      .groupBy(0) //以第一个元素为key进行分组
      .sum(1) //对所有数据的第二个元素求和

    resultDataSet.print()
  }
}
2)流处理wordcount

超级简单,比sparkstreaming的流式处理简单多了!!!

scala

import org.apache.flink.streaming.api.scala._

/**
 * 流处理的word count
 *
 */
object WordCountByStream {
  def main(args: Array[String]): Unit = {

    //创建一个批处理的执行环境
    val env: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment

    // 设置并行度
    env.setParallelism(6)

    //从端口中读取数据
    val dataSet: DataStream[String] = env.socketTextStream("192.168.162.102", 7777)

    // 对数据进行转换处理统计,先分词,再按照word进行分组,最后进行聚合统计

    val resultDataSet = dataSet
      .flatMap(_.split(" "))
      .filter(_.nonEmpty)
      .map((_, 1))
      .keyBy(0) //以第一个元素为key进行分组
      .sum(1) //对所有数据的第二个元素求和

    resultDataSet.print()

    // 启动任务执行
    env.execute()
  }
}

补充

scala

import org.apache.flink.api.java.utils.ParameterTool

//可以冲启动参数里面读取指定的参数
val parameterTool: ParameterTool = ParameterTool.fromArgs(args)
val host: String = parameterTool.get("host")
val port: Int = parameterTool.getInt("port")

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 基于云原生的大数据实时分析方案实践

    徐蓓,腾讯云容器专家工程师,10年研发经验,7年云计算领域经验。负责腾讯云 TKE 大数据云原生、离在线混部、Serverless 架构与研发。 1 方案介绍...

    腾讯云原生
  • CSA安装部署

    我们在Cloudera的流分析系列中介绍了《Cloudera中的流分析概览》、《SQL Stream Builder的概览》和《CSA的部署方案》,今天我们来进...

    大数据杂货铺
  • 最新消息!Cloudera 全球发行版正式集成 Apache Flink

    摘要:近期 Cloudera Hadoop 大神 Arun 在 Twitter 上宣布 Cloudera Data Platform 正式集成了 Flink 作...

    Fayson
  • 大数据框架—Flink与Beam

    Flink是Apache的一个顶级项目,Apache Flink 是一个开源的分布式流处理和批处理系统。Flink 的核心是在数据流上提供数据分发、通信、具备容...

    端碗吹水
  • Apache Flink初探

    Apache Flink 是一个开源的针对批量数据和流数据的处理引擎,已经发展为ASF的顶级项目之一。Flink 的核心是在数据流上提供了数据分发、通信、具备容...

    1001482
  • 硬核! 逛了4年Github ,一口气把我收藏的 Java 开源项目分享给你!

    Great Java project on Github(Github 上非常棒的 Java 开源项目).持续完善中。地址:https://github.com...

    Guide哥
  • Apache Flink 任意 Jar 包上传导致远程代码执行漏洞复现问题(漏洞预警)

    Apache Flink是一个用于分布式流和批处理数据的开放源码平台。Flink的核心是一个流数据流引擎,它为数据流上的分布式计算提供数据分发、通信和容错功能。...

    砸漏
  • 「漏洞预警」Apache Flink 任意 Jar 包上传导致远程代码执行漏洞复现

    Apache Flink是一个用于分布式流和批处理数据的开放源码平台。Flink的核心是一个流数据流引擎,它为数据流上的分布式计算提供数据分发、通信和容错功能。...

    实时计算
  • Apache Zeppelin 中 Flink 解释器

    概述 Apache Flink是分布式流和批处理数据处理的开源平台。Flink的核心是流数据流引擎,为数据流上的分布式计算提供数据分发,通信和容错。Flin...

    片刻
  • Apache Flink 任意 Jar 包上传致 RCE 漏洞复现

    Timeline Sec
  • Apache Beam 初探

    Beam可以解决什么问题?当MapReduce作业从Hadoop迁移到Spark或Flink,就需要大量的重构。Dataflow试图成为代码和执行运行时环境之间...

    Fred Liang
  • 【Flink】Flink简介及Standalone、Yarn和Kubernetes模式的部署

    Flink 起源于 Stratosphere 项目,Stratosphere 是在 2010~2014 年由 3 所地处柏林的大学和欧洲的一些其他的大学共同进行...

    魏晓蕾
  • 唯快不破!阿里、美团、滴滴、头条技术专家揭秘:Flink的应用与实践

    对于技术人来说,最可怕的事在于:当技术每天都在更新,自己却没有学习的机会,于是轻易被抛弃……

    养码场
  • Spark vs. Flink -- 核心技术点

    Apache Spark 是一个统一的、快速的分布式计算引擎,能够同时支持批处理与流计算,充分利用内存做并行计算,官方给出Spark内存计算的速度比MapRed...

    大数据技术架构
  • 最新 | Flink1.9来袭,Kafka x Flink Meetup深圳站精华(附PPT下载)

    虽然夏日已过,但是由 Apache Kafka 与 Apache Flink 联合举办的 Meetup 深圳站如火如荼的开展并在8月的最后一天落下帷幕。

    王知无-import_bigdata
  • 实时即未来:Apache Flink实践(一)

    的确,实时这个名词在现代这个科技社会越来越重要,仅以此篇文章记录我的Apache Flink实践学习过程~

    星橙
  • 基于 Flink+Iceberg 构建企业级实时数据湖

    Apache Flink 是大数据领域非常流行的流批统一的计算引擎,数据湖是顺应云时代发展潮流的新型技术架构。那么当 Apache Flink 遇见数据湖时,会...

    Spark学习技巧
  • 快速入门Flink (1) —— Flink的简介与架构体系

    历时一个多月,我们终于结束了【企业级360°全方位用户画像】的项目,想看具体详情的朋友,可以移步至博主的大数据项目专栏一饱眼福…

    大数据梦想家
  • 带你走入 Flink 的世界

    在 18 年时,就听说过 Flink 流式计算引擎,是阿里调研选型选择的新一代大数据框计算架,当时就记住了这个新框架。

    纯洁的微笑

扫码关注云+社区

领取腾讯云代金券