这篇文章上次修改于 1455 天前,可能其部分内容已经发生变化,如有疑问可询问作者。 > 最近工作上用到flink,需要对flink学习和研究 ### 1. 流处理的历史 第一代:lamda + 在批处理基础上加了流式处理,如图 ![图片1](https://imgcdn.greenhtml.com/QQ%E6%88%AA%E5%9B%BE20200914101554.png) + 缺点1:同样的逻辑要在离线和实时处理引擎写一遍 + 缺点2:实时处理是近似值,不是精确值 + 缺点3:管理维护麻烦 第二代2013:提供了---运行一次(exactly once)保证 + 从低级api提供高级api + 为了失败保证,延迟从毫秒到秒级别 + 结果仍然依赖事件的时间(timing)和顺序(Order) 第三代2015:解决了对时间和顺序的依赖 + 利用exactly once,第一次提供了,精确和一致性结果 + 可以像实时Live Data那样处理历史数据。 + 不再是高并发和低延迟权衡(trade off),而是两者都要保证 除了以上点,流处理还逐渐加入了下面特性: + 高可用 + 和资源管理器(Resource Manager) 高度集成,yarn,k8s + 无缝迁移job到另一个流处理引擎,不丢失现有状态 ### 2. Flink Flink就是第三代流处理器的一中 + 加入了:事件时间(event time) 和处理时间(processing time) 语义,event-time语义提供精确性和一致性结果(即使是乱序事件);Processing time 用来延迟要求非常低的场景 + 仅一次(Exactly once)保证 + 百万/千万数据,毫秒级别延迟 + 提供分层的API。如DataStream API和Processing functions(windows函数,异步操做和精确时间和状态函数),关系API,linq式的table api + 连接器(Connectors)---涵盖大部分存储系统---kafka,es,jdbc,hdfs,s3等 + 没有单点失败:高可用,7*24小时,非常低的downtime, 紧密集成yarn,k8s,mesos,可以快速从失败恢复,动态扩展job的运行环境 + 可以更改job的code,或者迁移job到不同的集群,而不丢失状态 + 详细,且可以自定义系统运行指标metrics,提前发现问题 + flink也可以是一个完整功能的离线处理引擎 + 开发人员友好,可以用ide调试(可以把flink所有模块运行到一个jvm里面)
已有 2 条评论
前来学习!!!!
前来学习!!!!