本文主要从使用层面介绍Flink独树一帜的设计, 帮助大家理解并更好的利用这些特性
Apache Flink的定义
Apache Flink是在无边界和有边界的数据流上进行有状态计算的框架.
同行对比
面对已经在实时领域耕耘了许久的两位老前辈: Storm和Spark Streaming, Flink有什么优势能够脱颖而出呢?
Spark Streaming
攒一段数据再计算, 本质还是批处理, 涉及到shuffle还是会有落盘, fetch和merge等操作. API用起来很流畅, 但是不适合维护State. Spark Streaming更适合做etl.Storm
Flink API跟Spark Streaming很像,但编程模型跟Storm更为接近。Storm自身不支持State,需要用户自己来维护,为了高可用和故障恢复, 用户通常会选择Redis做缓存,不过也由此也增加了对外部系统的依赖,同时也带来了额外的开销。
由此可见, Storm和Spark Streaming在State的处理上都有些力不从心, Flink与之相比最大的优势就是提供了完善的State的支持.
State
每个重要的流应用程序都是有状态的, 只有少数仅对事件做转换, 并且事件彼此独立的应用程序不需要状态. 任何运行基本业务逻辑的程序都需要记住事件或中间结果, 以便在后续的处理中访问它们.