读书笔记:《Introduction to Apache Flink》

原书《Introduction to Apache Flink》,没有找到中文版,硬着头皮啃。

Flink的命名即描述了它的风格,“flink”一词在德语中是快且灵活的意思,logo是一只柏林红褐色松鼠。

-------------------------------------------------------

一、平行对比

1. Apache Storm

流式处理,低延迟。

难以获得高吞吐。

不保证“最少一次”(exactly-once guarantees)。

2. Lambda Architecture

提供延迟的批处理和流式处理。

需要为批处理和流式处理的两套API编程两套业务代码。运维困难。

3.Apache Spark Streaming

利用“微批”近似流式。

高吞吐。

保证“最少一次”。

4. Storm Trident

Storm的扩展。

依靠“微批”保证“最少一次”,以时效性的降低为代价。



-------------------------------------------------------

二、流式架构

传统的架构,状态维护在数据库中,属于数据库集约型:
(1)数据分析慢、复杂。
(2)过于集约,所有应用需要访问数据库系统。
(3)容错处理逻辑复杂。

(4)在大规模分布式系统中,维护状态一致性越来越困难。

flink流式架构包含两部分:消息传输层和消息处理层。

message transport layer的两个代表分别是kafka和MapR:

(1)高性能。

(2)高可靠。数据持久化,可回放。

(3)生产者、消费者解耦。消费者可定制化订阅,消费进度可控。

(4)增加消费者不影响其他的消费者,对queue带来的压力微不足道。

(5)全球流复制。MapR具备这个能力,双向循环的流复制可以保持数据一致性。

MapR的性能优于Kafka,且具备流复制的能力,有必要了解一下:https://mapr.com/blog/kafka-vs-mapr-streams-why-mapr/


-------------------------------------------------------

三、Flink的能力

1. window


如图,传统的微批窗口很难对其到真实的session,这就影响了流式处理的准确性。

而Flink可以设置动态的阈值,如果超过这个时间阈值都没有事件发生则认为session结束,以此形成一个window。

2.event time versus processing time

相比于老的流式处理,Flink区分事件时间和处理时间。在计算窗口中,使用事件时间更加准确。

3.checkpoint

使用checkpoint追踪状态,便于失败重置或者回溯处理。

4. 低延迟高准确

5. 开发和操作友好

表达能力减少错误概率,状态维护(开发人员无需在应用中管理状态),一套技术同时胜任流式和批处理


四、处理时间

流式处理和批处理的区别之一就是是否需要显示的处理时间。

批处理的问题:

1.部件太多。每个部件都有学习和管理成本以及自身的BUG。

2.隐式地处理时间。批任务调度时间不一定与业务期望的时间一致,这就导致开发运维的概念和业务的概念混淆。

3.事件时间和处理时间不一致,事件可能进入错误的批。

4.批的区间在边界上不是很明确。

lambda架构:

流式处理提供实时的近似结果,批处理提供小时级别的准确结果。

流式架构(message transport + flink):

解决了以上问题。

1.处理变慢或数据陡增可以反压在Q;

2.乱序事件处理对用户透明;

3.在flink中修改窗口的定义从而得到会话窗口;

4.可回放事件;

5.减少了多个系统的学习、管理和开发成本;

流处理和批处理最主要的两个区别就是:(1)以真实的事件流式的发生方式对待事件,而不是人为的分批;(2)显示定义分批窗口,而不是隐含在聚合、计算和调度中。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值