Flink DataStream API

实时分析是当前一个比较热门的数据处理技术,因为许多不同领域的数据都需要进行实时处理、计算。到目前为止,有很多技术提供实时的解决方案,包括Storm、Spark Streaming等。这些需求源自于物联网的应用程序需要存储、处理和实时或近实时分析,为了满足这种需求,Flink提供了数据流处理API即DataStream API。

在总结DataStream API之前,我们先简单的了解一下Flink程序的基本运行流程,不论是Data Streaming还是DataSet,Flink程序都主要由以下几个部分组成:1、获取运行时环境(getExecutionEnvironment());2、绑定数据源(addSource);3、对接收的书进行transformation操作;4、dataSink,指定数据计算的输出结果方式(输出到文件或直接打印);5、程序触发执行(execute(jobName))。从上述步骤中,可以看出,我们真正需要账务及操作的就三个过程:Source、Transformation、Sink。DataStream API,即对数据流进行流处理操作,将流式的数据抽象成分布式的数据流,用户可以方便地对分布式数据流进行各种操作,支持Java和Scala。

 

Flink中的DataStream程序是实现在数据流上的transformation(如filtering, updating state, defining windows, aggregating)的普通程序。创建数据流的来源多种多样(如消息队列,Socket流、文件等)。程序通过Data Sink返回结果,如将数据写入文件,或标准输出。

一、DataStream Sources

Flink作为一款优秀的流式计算框架,可以实时的处理实时产生的数据流,只要数据不断,Flink就可以一直计算下去,Data Source就是数据源输入,你可以通过StreamExecutionEnvironment.addSource(sourceFunction)来为你的程序绑定一个数据源。flink提供了大量的已经实现好的source方法,此外我们也可以实现sourcefunction来自定义并行度为1的Source,也可以实现 ParallelSourceFunction 接口或者扩展 RichParallelSourceFunction 来自定义并行的 source。

1、基于socket

env.socketTextStream(hostname, port, delimiter) 从socker指定的ip地址和端口号处读取数据,元素可以通过一个分隔符切开。

package com.bigdata.flink.Stream;

import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.common.functions.ReduceFunction;
import org.apache.flink.api.java.utils.ParameterTool;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.api.windowing.time.Time;
import org.apache.flink.util.Collector;

/**
 * 滑动窗口的计算
 *
 * 通过socket模拟产生单词数据 flink对其进行统计计数
 * 实现时间窗口:
 *              每隔1秒统计前两秒的数据
 */
public class SocketWindowWordCount {
    public static void main(String[] args) throws Exception{
        //定义端口号,通过cli接收
        int port;
        try{
            ParameterTool parameterTool = ParameterTool.fromArgs(args);
            port = parameterTool.getInt("port");
        }catch(Exception e){
            System.err.println("No port Set, use default port---java");
            port = 9000;
        }

        //获取运行时环境,必须要
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        //绑定Source,通过master的nc -l 900 产生单词
        String hostname = "192.168.83.129";
        String delimiter = "\n";
        //连接socket 绑定数据源
        DataStreamSource<Stri
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值