flink基本原理与kafka数据处理实践

基本原理

简介

  1. flink支持大规模计算能力,能够在多个节点上并发运行,具有高吞吐以及低延迟的特点

  2. flink是有状态的和容错的,保证了其Exactly-Once语义,可以无缝的从故障中恢复

  3. flink提供了多种算子,数据处理灵活多样

工作原理

flink框架

  • JobClient 负责接收用户程序,解析和优化程序的执行计划,然后提交到JobManager,

  • JobManager负责协调资源及控制Job的任务执行并进行对应的状态保证和容错

  • TaskManager是运行在不同节点上的JVM进程,负责接收JobManager发送过来的task的任务

    • Task运行在TaskManager的Slot上

    • Slot是TaskManager资源粒度的划分,每个Slot都有自己独立的内存,但是共享了TaskManager的CPU,Slot的个数就代表了一个程序的最高并行度

flink算子说明与代码解析

Map

输入与输出一比一对应的算子,例如传入的是一个整型的集合,输出的是进行map算法计算后的整型的集合

接口声明:


public interface MapFunction<T, O> extends Function, Serializable {

    O map(T var1) throws Exception;

}

由代码定义可以看出,接收的是一个T,对应输出了一个O

实现举例(将源数据中的Integer值扩大10倍)


SingleOutputStreamOperator<Integer> result = streamSource.map(new MapFunction<Integer, Integer>() 

{ 

    @Override 

    public Integer map(Integer item) throws Exception 

    { 

        return item \* 10; 

    } 

});

Flite

定义判断条件,符合条件的进行过滤,这里与map不同的是,如果有被过滤掉的值,那么输出可能会比原先的值少

接口声明:


public interface FilterFunction<T> extends Function, Serializable {

     boolean filter(T var1) throws Exception;

}

实现举例(去掉string为"test"的字符串)


DataStream<String> FilterRes1 = source.filter(new FilterFunction<String>() {

@Override

public boolean filter(String s) throws Exception {

    if (s.equals("test")) {

        return true;

    }

    return false;

}

});

FlatMap

输入与输出为一对多的形式(可以做到替代map和filter的操作,但是map与filter可以让代码更为清晰简洁)

代码interface


public interface FlatMapFunction<T, O> extends Function, Serializable {

    void flatMap(T var1, Collector<O> var2) throws Exception;

}

由代码interface可以看出,输入的是T,计算后,输出O的一个Collecto

代码实现示例(收集大于等于0的数据)


streamSource.flatMap(new FlatMapFunction<Integer, Integer>() {

    @Override

    public void flatMap(Integer item, Collector<Integer> out) throws Exception {

        if (item < 0) {

            item = -item;

        }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值