什么是flink
Apache Flink是一个开源的分布式,高性能,高可用,准确的流处理框架。支持实时流处理和批处理
Apache Flink是一个框架和分布式处理引擎,用于在无界和有界数据流上进行有状态计算。Flink被设计用于在所有常见的集群环境中运行,以内存形式和任何规模执行计算
数据源→数据处理和分析→数据写入到目的地
组件
数据源:
- Clicks:点击流
- Logs:物联网
- IOT:交易数据
输出位置:
- Application:应用 比如邮件的api,短信的api
- EvenetLog:消息队列,下一个flink的输入
- DataBase:数据库
资源调度:
- K8s
- Yarn
- Mesos
存储:
- HDFS
- S3
- NFS
有界和无界数据
-
有界数据
有一个定义好的开始和结束。在执行任何计算之前,可以通过摄取所有数据来处理有界流。处理有界流不需要有序摄取,因为有界数据集总是可以排序的。有界流的处理也被称为批处理 -
无界数据
无界流有一个开始,但没有定义的结束。它们不会在生成数据时终止并提供数据。必须连续处理无边界流,事件被摄入后必须立即处理。等待所有输入数据到达是不可能的,因为输入是无界的,并且不会在任何时间点完成。处理无界数据通常需要以特定的顺序接收事件,例如事件发生的顺序,以便能够推断出结果的完整性
状态事件驱动的api
Processfunction是Flink提供的最富表现力的函数接口,Flink提供processfunction来处理来自一个或两个输入流事件。Process函数提供了对事件和状态的细粒度控制。ProcessFunction可以任意修改它的状态并注册定时器,从而在将来触发回调函数。因此,Processfunction可以根据许多有状态事件驱动的应用程序的需要实现每个事件的复杂业务逻辑。
流或批处理的api
DataStream API为许多常见的流处理操作提供基本类型,比如窗口化,一次记录转换和通过查询外部数据存储来丰富事件。DataStream API可用于java和scala,它基于map(),reduce()和aggregate()等函数。函数可以通过扩展接口或作为java或Scala lambds函数来定义。
高级别的api
Flink有两个关系API,表API和SQL。这两个api都是用于批处理和流处理的统一api,即,查询在无界或有界数据、并进行相应执行,并产生相同的结果。表API和SQL利用Apache sql解析器进行解析、验证和查询优化。它们可以与DataStream和DataSet api无缝集成,并支持用户定义的变量、聚合和表值函数。
Flink运行程序多样化
Flink是一个分布式系统,需要计算资源才能执行应用程序。Flink集成了所有常见集群资源管理器,同样也可以设置为作为独立集群运行,Flink可以通过特定于资源管理器的部署模式去实现每个资源管理器。
Flink的应用场景
典型的事件驱动的场景如下:
- 欺诈检测(Fraud detection) 如短信获取
- 异常检测(Anomaly detection)
- 基于规则的告警(Rule-based alerting)
- 业务流程监控(Business process monitoring)
- Web应用程序(社交网络) 如你关注我,我@你