《基于Apache Flink的流处理》读书笔记( 二 )


4.3键控状态(Keyed State)键控状态是根据输入数据流中定义的键(key)来维护和访问的        key相同的数据所能访问的状态        KeyedState只能在键控流中使用主要有4种:        ValueState:将状态表示为单个的值        ListState:将状态表示为一组数据的列表        MapState:将状态表示为一组 Key-Value 对        ReducingState:将状态表示为一个用于聚合操作的列表
4.3状态后端:把算子状态写到存储系统为了保证状态的快速访问,每个并行的任务都会把状态存储在本地JVM,状态后端负责将任务状态以检查点的形式写入到远程持久化存储,该存储可能是一个分布式的文件系统,也可能是某个数据库系统
五.算子扩缩容算子主要有OperateState和KeyedState,他们的扩缩容方法不一样
5.1键控状态(KeyedState)KeyState发生重新分配后,key值分配到哪个Task上,则对应的KeyState也会分配到对应的Task上        做法是:将Key值读取出来,Hash分配到KeyGroup上,KeyGroup的数量对应着重分区Task的数量,最后把KeyGroup分配到对应的Task上 。
5.2算子状态OperatorStateListState:把所有状态的ListState收集起来,均匀分配给新的任务        Union List State:将List收集起来,广播到全部的任务,由任务决定去留        BrodCastState:广播状态都一样,直接拷贝到新的任务上
六、窗口6.1时间窗口有滚动、滑动、会话三种
6.1.1滚动窗口:Tumbling Windows将数据依据固定的窗口长度对数据进行切分        时间对齐,窗口长度固定,没有重叠
6.1.2滑动窗口:Sliding Windows滑动窗口是固定窗口的更广义的一种形式,滑动窗口由固定的窗口长度和滑动间隔组成        窗口长度固定,可以有重叠
6.1.3会话窗口(Session Windows)一段时间没有接收到新数据就会生成新的窗口,消息之间的间隔小于超时阈值(sessionGap)的,则被分配到同一个窗口,间隔大于阈值的,则被分配到不同的窗口        特点:时间无对齐
七、Flink组成7.1JobManager控制单个应用程序的执行,包括接收要执行的应用JobGraph和Jar文件、将JobGraph转化成ExecutionGraph、向ResourceManager申请资源启动TaskManager、分发应用给TaskManager执行、检查点CheckPoint工作
7.2ResourceManager向集群资源提供者申请资源、释放资源
7.3TaskManager1.注册Slot         2.启动任务
7.3Dispatcher1.启动JobMaster         2.提供REST应用查询
八、高可用性1.依赖Zookeeper来完成                 1.1.活跃状态的JobManager将JobGraph和Jar的路径写到Zookeeper中                 1.2.将CheckPoint的路径写入Zookeeper中         2.应用恢复,当活跃的JobManager发生故障,其下的应用都会取消                 2.1新接手的JobManager请求Zookeeper,获取JobGraph和Jar文件以及CheckPoint                 2.2重启应用
九、数据传输1.在算子处理完数据后,为了不造成太大的网络压力,不会马上发送,会先收集到缓冲区中,以批次形式发送         2.每个TaskManager都有网络缓冲池,用于不同机器数据传输         3.如果接收端和发送端位于同一台机器内,序列化先放入缓冲区,缓冲区完毕放到队列中,接收任务获取数据再反序列化         4.如果发送端和接收端不在同一个机器,放入缓存后,先发送到TaskManager的网络缓冲池中,再进行发送

经验总结扩展阅读