欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

flink

程序员文章站 2022-06-17 13:17:57
...
  1. 简介
    是一个框架和分布式处理处理引擎,用于对*和有界数据流进行状态计算。
    低延迟,高吞吐,结果正确性和良好的容错性。

  2. 应用场景:
    flink

  3. 流处理演变:
    flink
    离线大数据事务图如下:
    flink
    有状态的流式处理:
    如sum统计,数据仍然是流进来,流出去,但可以保存一个求和的本地状态,存储在内存里,再写入到远程的存储空间里,落盘,为flink的检查点概念。
    flink
    但在分布式,高并发情况下一致性不好,可能网络延迟,乱序,不能保证数据的一致性。但如果隔一段时间再处理,数据应该都齐了,才能保证一致性。所以批处理如下:
    flink
    上面为第二代流处理,维护两套系统,批处理解决了一致性,但出现了延迟,实时性不好。第二套流处理解决了延迟问题,保证了实时性,但一致性不够好。两套配合起来解决了高吞吐,低延迟,正确性。
    缺点:本来是一套系统,现在要维护两套系统,比较繁琐。api也不一样,

于是第三代流处理系统出现了:
flink
4. flink主要特点
flink
基于流的世界观:
spark是一批一批的数据,包装成RDD,然后统一做处理
flink是一切都是流,离线是有界的流,实时是*的流。

分层API
flink

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

  1. flink vs spark streaming
    flink
    flink
  2. 第一个例子
    批处理:
package com.dong.flink

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

/**
 * 批处理
 */
object wordCount {

  def main(args: Array[String]): Unit = {

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

    //从文件中读取数据
    val txtPath = "D:\\dev\\java\\ide\\scala\\ws\\flink\\flink\\src\\main\\res\\hello.txt"
    val inputDataSet = env.readTextFile(txtPath)

    //分词之后count统计
    val wordCountDataSet = inputDataSet.flatMap(_.split(" "))
      .map((_, 1)).groupBy(0).sum(1);

    //打印
    wordCountDataSet.print();
  }

}

流处理:

package com.dong.flink

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

/**
 * 流处理
 */
object StreamWordCount {

  def main(args: Array[String]): Unit = {
    //创建一个流处理的执行环境
    val env = StreamExecutionEnvironment.getExecutionEnvironment

    //接收socket数据流
    val textDataStream = env.socketTextStream("localhost", 7777)

    //逐一读取数据,打散之后进行word count
    val wordCountDataStream = textDataStream.flatMap(_.split("\\s"))
      .filter(_.nonEmpty)
      .map((_, 1))
      .keyBy(0)
      .sum(1)

    //打印
    wordCountDataStream.print()

    //比批处理多一步骤,调用真正执行作业
    //上面只是定义完成一组处理流程,未执行任务
    env.execute("stream word count job")
  }

}

流处理需要建立一个socket模拟流,那么可以使用nc工具,参考:
下载nc.exe工具,放入C:\windows\system32目录下
打开命令界面 cmd,输入 nc -L -p 9999
nc下载

相关标签: flink