1.Flink学习之旅(一)

1. Apache Flink官网

2. 登峰大数据(微信公众号)

在这里插入图片描述

3. Flink简介

  • Apache Flink 是一个开源框架分布式处理引擎,用于在无边界有边界数据流上进行有状态的计算。Flink 能在所有常见集群环境中运行,并能以内存速度和任意规模进行计算。
  • 总述
    • 处理无界和有界数据
    • 部署应用到任意地方
      • Flink 集成了所有常见的集群资源管理器,例如 Hadoop YARNApache MesosKubernetes,但同时也可以作为独立集群运行。
    • 运行任意规模应用
      • Flink 旨在任意规模上运行有状态流式应用
      • Flink 很容易维护非常大的应用程序状态。其异步和增量的检查点算法对处理延迟产生最小的影响,同时保证精确一次状态的一致性。
    • 利用内存性能
  • 特性
    • 批流一体化
    • 精密的状态管理
    • 事件时间支持
    • 精确一次的状态一致性保障

4. Flink常见的几类应用

4.1. 事件驱动型应用

  • 反欺诈
  • 异常检测
  • 基于规则的报警
  • 业务流程监控

4.2. 数据分析应用

  • 电信网络质量监控
  • 移动应用中的产品更新及实验评估分析
  • 消费者技术中的实时数据即席分析
  • 大规模图分析

4.3. 数据管道应用

  • 电子商务中的实时查询索引构建
  • 电子商务中的持续 ETL(Extract-Transform-Load)

5. Flink的安装部署和尝鲜

5.1. 本地安装教程

5.2. WordCount演示(scala版本)

  • build.sbt

    name := "FlinkDemo"
    
    version := "0.1"
    
    scalaVersion := "2.11.8"
    
    libraryDependencies ++= Seq(
      "org.apache.flink" % "flink-core" % "1.10.0",
      "org.apache.flink" %% "flink-scala" % "1.10.0",
      "org.apache.flink" %% "flink-streaming-scala" % "1.10.0",
      "org.apache.flink" %% "flink-clients" % "1.10.0"
    
    )
    
  • 主题逻辑源代码

    import org.apache.flink.api.java.utils.ParameterTool
    import org.apache.flink.api.scala._
    import org.apache.flink.streaming.api.scala.{DataStream, StreamExecutionEnvironment}
    import org.apache.flink.streaming.api.windowing.time.Time
    
    /**
     * @author xiaofan
     */
    
    case class WordWithCount(word: String, count: Int)
    
    object SocketWindowWordCount {
      def main(args: Array[String]): Unit = {
        val port: Int = try {
          ParameterTool.fromArgs(args).getInt("port")
        } catch {
          case e: Exception => {
            System.err.println("No port specified. Please run 'SocketWindowWordCount --port <port>'")
            return
          }
        }
        // 获得执行环境
        val env: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment
        // 获得输入数据
        val text: DataStream[String] = env.socketTextStream("192.168.1.27", port, '\n')
        // 处理数据
        val windowCounts: DataStream[WordWithCount] = text.flatMap(_.split("\\s"))
          .map(x => WordWithCount(x, 1))
          .keyBy("word")
          .timeWindow(Time.seconds(5), Time.seconds(1))
          .sum("count")
        // 以单线程打印结果
        windowCounts.print().setParallelism(1)
    
        env.execute("Socket Window WordCount")
    
      }
    }
    
    
  • 启动本地服务

    nc -lk 9999
    
  • 打jar包,提交flink项目

    ./flink run /home/hadoop/fanjh/flinkdemo_2.11-0.1.jar --port 9999
    
  • web前端展示效果
    在这里插入图片描述

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

6. 路漫漫其修远兮,吾将上下而求索

发布了85 篇原创文章 · 获赞 12 · 访问量 3722

猜你喜欢

转载自blog.csdn.net/fanjianhai/article/details/104461043
今日推荐