flink-简介(一)

1、flink-简介(一)

1.定义:flink是一个框架和分布式处理引擎,用于对无界和有界数据流进行状态计算
2.特点:低延迟、高吞吐、结果的准确性和容错性
3.flink主要优势:

  • 事件驱动:每一条消息或记录就是一个事件
  • 基于流的世界观:一切都是流组成的,离线数据是有界的流,实时数据是没有界限的流,即有界和无界的流
  • 分层的API:越顶层越抽象,表达含义越简明,使用越方便。越底层越具体,表达能力越丰富,使用越灵活

4.其他特点:

  • 支持事件时间(event-time)和处理时间(process-time)语义
  • 精确一次(exactly-once)的状态一致性保证
  • 低延迟,每秒处理数百万个事件,毫秒级延迟
  • 与众多常用的存储系统的链接
  • 高可用,动态扩展,实现7*24小时全天候运行

5.fink与spark的比较

  • 数据模型
    • spark采用RDD模型,streaming的DStream实际上也是一组小批数据RDD的集合
    • flink基本数据模型是数据流以及事件序列
  • 运行时架构
    • spark是批计算,将DAG划分为不同的stage,一个完成后才可以计算下一个
    • flink是标准的流执行模式,一个事件在一个节点处理完后可以直接发往下一个几点进行处理

6.基础API

  1. pom

     <dependencies> 
            <dependency> 
                <groupId>org.apache.flink</groupId> 
                <artifactId>flink-scala_2.11</artifactId> 
                <version>1.7.2</version> 
            </dependency> 
            <!-- https://mvnrepository.com/artifact/org.apache.flink/flink-streaming-scala --> 
            <dependency> 
                <groupId>org.apache.flink</groupId> 
                <artifactId>flink-streaming-scala_2.11</artifactId> 
                <version>1.7.2</version> 
            </dependency> 
        </dependencies> 
    
    
    <build> 
        <plugins> 
        <!-- 
    该插件用于将 Scala
    代码编译成 class
    文件 --> 
        <plugin> 
            <groupId>net.alchim31.maven</groupId> 
            <artifactId>scala-maven-plugin</artifactId> 
            <version>3.4.6</version> 
            <executions> 
                <execution> 
                    <!-- 
    声明绑定到 maven
    的 compile
    阶段 --> 
                    <goals> 
                        <goal>testCompile</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> 
     
    

    批处理 wordcount

     def main(args: Array[String]): Unit = { 
        // 创建执行环境 
        val env = ExecutionEnvironment.getExecutionEnvironment 
        // 从文件中读取数据 
        val inputPath = "D:\\Projects\\BigData\\TestWC1\\src\\main\\resources\\hello.txt" 
        val inputDS: DataSet[String] = env.readTextFile(inputPath) 
        val wordCountDS: AggregateDataSet[(String, Int)] = inputDS.flatMap(_.split(" 
    ")).map((_, 1)).groupBy(0).sum(1) 
     
        // 打印输出 
        wordCountDS.print() 
      } 
    } 
    

    流处理

     // 从外部命令中获取参数 
        val params: ParameterTool =  ParameterTool.fromArgs(args) 
        val host: String = params.get("host") 
        val port: Int = params.getInt("port") 
     
        // 创建流处理环境 
        val env = StreamExecutionEnvironment.getExecutionEnvironment 
        // 接收 socket
    文本流 
        val textDstream: DataStream[String] = env.socketTextStream(host, port) 
     
        // flatMap
    和 Map
    需要引用的隐式转换 
        import org.apache.flink.api.scala._ 
        val dataStream: DataStream[(String, Int)] = 
    textDstream.flatMap(_.split("\\s")).filter(_.nonEmpty).map((_, 1)).keyBy(0).sum(1) 
      dataStream.print().setParallelism(1) 
     
        // 启动 executor ,执行任务 
        env.execute("Socket stream word count") 
      } 
    } 
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值