zoukankan      html  css  js  c++  java
  • Flink基础-DataStreamAPI编程

    1.分布式流处理的基本模型

    逻辑模型:

    一个source 一个operation 一个sink

    物理模型:

    多个source对应多个operation一个sink

    不同节点直接的数据传输需要接触到网络

    2.流的基本操作

    单条流的操作:

    map

    两条流的操作:

    connect:connectedstream,把两条不同数据类型的流合并到一条流中

    comap:把这条流又返回给单条流

    拆分流的操作:

    split:splitstream

    datastream的基本转换:

    keyedstream的理解:

    会把不同类别的数据发送到不同的节点上执行

    key数>>并发度

    datastream:

    物理分组:

    globa:把所有的数据流都放入到第一个task中

    broadcast:广播,会把某个节点上的数据流广播到所有的节点上去

    forward:上下游并发度一样时一对一发送,如果上下游的并发度不同会在构建执行图的时候报错,

    如果上下游并发度一致会自动启用forward

    shuffle:随机分配,从当前实例中随机挑选几个放入到下一个实例中

    rebalance:类似shuffle,是为了负载均衡随机分配

    recale:本地轮流分配,只会看到自己本机的实例,轮流进行分流

    partitioncusotm:自定义数据单播,可以自己定义从本机中选择一条数据流发送到下游,但是下游只能是一个实例

    类型系统:

    flink序列化是强类型的,这是为了提升序列化和反序化的速率

    基本类型:javaj的基本类型,还有void,string,date,bigdecimal,biginteger

    复合类型:tuple,和scala case class,row,pojo

    tuple有数据条数上限,不支持null

    row支持null,没有数据条数上限

    辅助、集合类型:option,either,list,map等

    其他类型:

    自定义typeinfomation或kryo处理,一般不推荐使用,最好不要使用泛型,因为有类型擦出

    fold:可以允许前后的值不一致

    reduce:需要提供一个一致的初始值

    keyby如果遇到数据倾斜的解决方案:localgruopby

    在keyby之后,在某个节点上会分配到了比较大的key,会在单节点上启动多个线程,类型于一个先聚合在分组

    可以提前对key值进行打散,然后在进行统计

    richfunction

    每个函数都有自己的一个声明周期,open,close

    在最后的时候在做一些清理的工作

    流和多个动态维表的join:

    首先需要自己控制数据流和动态维表的join,可以在key join的时候,尽量减少join的中间的结果

    在join的算子中,根据key值手动的去多个维表中拉取数据,然后关联

  • 相关阅读:
    今天还做了点有意义的事
    读“记当年的公开课”
    无语
    小议如何控制学生机结束学生端多媒体控制平台程序
    今天去了中山
    Windows服务创建及安装
    SQL Server数据库表锁定原理以及如何解除表的锁定示例演示
    本地SQL脚本操作外部服务器结果集
    list.FindAll
    一个高效的数据分页的存储过程 可以轻松应付百万数据
  • 原文地址:https://www.cnblogs.com/javazyh/p/13040063.html
Copyright © 2011-2022 走看看