03-flink的主要特点
一、flink事件驱动
左图为传统事务处理过程-右图为事件驱动处理过程
Traditional transaction application: 传统的事务应用程序
Events: 事件
Application: 应用
Transactional DB:传统数据库
trigger:触发
Action:操作
Event-driven application:事件驱动的应用程序
Event Log:事件日志
ingest:摄入
Application:应用
State:状态
periodically write asynchronous checkpoints:定期写异步检查点
Persistent storage:持久性存储
- 传统型事务应用程序处理流程:一个事件通过后台应用程序处理,通过读写数据库,将结果返回给用户。
- 事件驱动处理过程:通过收集事件日志,摄入到flink应用中,通过一个本地状态而不去查询关系型数据库,本地状态为了保证稳定性,还可以将状态存到一个持久性存储中,最终通过计算,将结果保存到持久存储或者发送给下游应用使用。
二、flink流式数据形式
flink中,一切都是由流组成的,离线数据是有界的流,实时数据是一个没有界限的流。
flink流式数据
bounded stream:有界数据流
unboude stream:无界数据流
三、flink拥有分层API
- 越顶层的越抽象,表达含义越简明,使用越方便,如直接使用SQL。
-
越底层越具体,表达能力丰富,使用灵活,任何逻辑都可以用ProcessFunction去表达,但是代码逻辑实现较难。
flink分层api
High-level Analytics API:高级api,分析型api,直接写SQL
Stream-&Batch Data Processing: 流与批数据处理api,可以开窗口
Stateful Event-Driven Applications:事件驱动型api,可以拿到事件的状态,和时间
同样可以如下理解:
flink分层api
High-level language:高级语言,即使用高级语义描述计算
Declarative DSL:声明式DSL
core APIs:核心PI
Stateful Stream Processing:有状态的流处理
low-level building block:低级api,构建块
四、flink时间语义
支持事件事件(event-time)和处理时间(processing-time)
详见后续连载:
五、精确一次(exactly-once)的状态一致性保证
详见后续连载:
六、可与常用存储系统连接(如redis,es,mysql,clickhouse等)
详见后续连载:
七、低延迟、高吞吐、每秒处理百万个事件
八、可实现动态扩展