Flink状态管理与checkpoint容错机制(二)
状态分类 Flink支持两种状态Keyed State和Operator State。两类状态又都包括原始状态row state和托管状态managed state。 原始状态:由用户自行管理状态具体的数据结构,框架在做checkpoint的时候,使用byte[]来读写状态内容,对其内部数据结构一无所知。当实现一个用户自定义的operator时,会使用到原始状态 托管状态是由Flink框架管 ...
Flink状态管理与Checkpoint机制(一)
何为状态? 计算任务的结果不仅仅依赖于输入,还依赖于它的当前状态,其实大多数的计算都是有状态的计算。比如wordcount,给一些word,其计算它的count,这是一个很常见的业务场景。count做为输出,在计算的过程中要不断的把输入累加到count上去,那么count就是一个state。 在批处理过程中,数据是划分为块分片去完成的,然后每一个Task去处理一个分片。当分片执行完成后,把输出聚合 ...
Flink-Watermark机制
watermark简介 watermark的概念 watermark是一种衡量Event Time进展的机制,它是数据本身的一个隐藏属性。通常基于Event Time的数据,自身都包含一个timestamp,例如1472693399700(2016-09-01 09:29:59.700),而这条数据的watermark时间则可能是: watermark(1472693399700) = 14726 ...
Flink广播状态
背景 有这样一个需求:flink或者spark任务需要访问数据库,或者用到表schema信息。但此时数据库中的字段有添加或者修改时(schama发生改变的时候),这时候任务就会失败。最直接的做法就是重启flink或spark任务,但该做法会对业务数据造成一定的影响。 方案:将改动的schema信息放入redis中,再通过broadcast广播的方式传送给数据流。 flink broadcast s ...
kafka本地安装
安装zookeeper 地址:zookeeper-3.4.14,下载后解压 进入zookeeper的相关设置所在的文件目录,例如本文的:D: \ …\zookeeper-3.4.10\conf 将"zoo_sample.cfg"重命名为"zoo.cfg" dataDir=/tmp/zookeeper to D:/ …/zookeeper-3. ...
Flink背压机制
背压产生的原因 流处理系统需要能优雅地处理反压(backpressure)问题。反压通常产生于这样的场景:短时负载高峰导致系统接收数据的速率远高于它处理数据的速率。许多日常问题都会导致反压,例如,垃圾回收停顿可能会导致流入的数据快速堆积,或者遇到大促或秒杀活动导致流量陡增。反压如果不能得到正确的处理,可能会导致资源耗尽甚至系统崩溃。 目前主流的流处理系统 Storm/JStorm/Spark St ...
拉链表
历史拉链表是一种数据模型,主要是针对数据仓库设计中表存储数据的方式而定义的。所谓历史拉链表,就是指记录一个事物从开始一直到当前状态的所有变化信息。拉所有记录链表可以避免按每一天存储造成的海量存储问题,同时也是处理缓慢变化数据的一种常见方式 一、应用场景 现假设有如下场景: 一个企业拥有5000万会员信息,每天有20万会员资料变更,需要在数仓中记录会员表的历史变化以备分析使用,即每天都要保留一 ...
深入理解Kafka副本机制
一、Kafka集群 Kafka 使用 Zookeeper 来维护集群成员 (brokers) 的信息。每个 broker 都有一个唯一标识 broker.id,用于标识自己在集群中的身份,可以在配置文件 server.properties 中进行配置,或者由程序自动生成。下面是 Kafka brokers 集群自动创建的过程: 每一个 broker 启动的时候,它会在 Zookeeper 的 ...
Kafka消费者详解
一、消费者和消费者群组 在 Kafka 中,消费者通常是消费者群组的一部分,多个消费者群组共同读取同一个主题时,彼此之间互不影响。Kafka 之所以要引入消费者群组这个概念是因为 Kafka 消费者经常会做一些高延迟的操作,比如把数据写到数据库或 HDFS ,或者进行耗时的计算,在这些情况下,单个消费者无法跟上数据生成的速度。此时可以增加更多的消费者,让它们分担负载,分别处理部分分区的消息,这就是 ...
Kafka生产者详解
一、生产者发送消息的过程 首先介绍一下 Kafka 生产者发送消息的过程: Kafka 会将发送消息包装为 ProducerRecord 对象, ProducerRecord 对象包含了目标主题和要发送的内容,同时还可以指定键和分区。在发送 ProducerRecord 对象前,生产者会先把键和值对象序列化成字节数组,这样它们才能够在网络上传输。 接下来,数据被传给分区器。如果之前已经在 ...