1.1.flink简介
1.1.1.flink是什么
Apache Flink是一个框架和分布式处理引擎,用于对无界和有界数据流进行状态计算。
1.1.2.为什么要用flink
- 流数据更真实地反映了我们的生活方式
- 传统的数据架构师基于有限数据集的
我们的目标:
- 低延迟(Spark Streaming的延迟是秒级,flink的延迟是毫秒级)- 高吞吐(阿里每秒钟使用flink处理4.6PB,双十一大屏)- 结果的准确性和良好的容错性(exactly-once)
1.1.3.流处理的发展和演变
Storm —>Spark Streaming —>Flink
1.1.4.flink的主要特点
Flink的主要特点:
时间驱动(Event-driven)
- 基于流的世界观:在Flink的世界观中,一切都是由流组成的,离线数据是有界的流;实时数据是一个没有界的流:这就是所谓的有界流和无界流。(流批一体)
- 支持事件时间(event-time)和处理时间(processing-time)语义
- 精确一次(exactly-once)的状态一致性保证
- 低延迟,每秒处理数百万个事件,毫秒级延迟(实际上就是没有延迟)
- 与众多常用存储系统的链接(ES,HBase,MySQL,Redis…)
高可用(Zookeeper),动态扩展,实现7*24小时全天候运行
1.1.5.flink vs Spark Streaming
流Stream和微批的区别:
数据模型
- Spark采用RDD模型,Spark Streaming的DStream实际上也就是一组组小批数据RDD的集合
- Flink基本数据模型是数据流,以及事件(Event)序列(Integer、String、Long、POJO Class)
运行时架构
- Spark是批计算,将DAG划分为不同的Stage,一个Stage完成后才可以计算洗一个Stage
Flink是标准的流执行模式,一个事件在一个节点处理完后可以直接发往下一个节点进行处理
1.2.flink-word-count代码
Maven版本:apache-maven-3.8.5
JDK版本:jdk-1.8
IDEA版本:2021.3.3
pom.xml文件内容: ```java <?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">
4.0.0 com.transwarp.io flink_learn01 1.0 1.13.0 1.8 2.12 1.7.30 8 8 org.apache.flink flink-java ${flink.version} org.apache.flink flink-streaming-java${scala.binary.version} ${flink.version} ${scala.binary.version}org.apache.flink flink-clients ${flink.version} org.apache.flink flink-table-api-java-bridge${scala.binary.version} ${flink.version} ${scala.binary.version}org.apache.flink flink-table-planner-blink ${flink.version} org.apache.flink flink-streaming-scala${scala.binary.version} ${flink.version} org.apache.flink flink-table-common ${flink.version} ${scala.binary.version}org.apache.flink flink-cep ${flink.version} org.apache.flink flink-csv ${flink.version} org.apache.flink flink-connector-kafka${scala.binary.version} ${flink.version} org.apache.bahir flink-connector-redis_2.11 1.0 mysql mysql-connector-java 8.0.21 ${scala.binary.version}org.apache.flink flink-connector-jdbc ${flink.version} org.slf4j slf4j-log4j12 ${slf4j.version} org.apache.logging.log4j log4j-to-slf4j 2.14.0 org.apache.maven.plugins maven-assembly-plugin 3.3.0 jar-with-dependencies make-assembly package single org.apache.maven.plugins maven-compiler-plugin 8 8
