赞
踩
Apache Flink是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算。核心是一个分布式、高性能、高可用、实时性的流式计算框架
Flink起源于Stratosphere项目, 2014年4月Stratosphere的代码被复制并捐赠给了Apache软件基金会, 2014年12月,Flink一跃成为Apache软件基金会的顶级项目。
Spark和Flink都是分布式计算引擎,但是,Spark 和 Flink 一开始都拥有着同一个梦想,他们都希望能够用同一个技术把流处理和批处理统一起来,但他们走了完全不一样的两条路前者是以批处理的技术为根本,并尝试在批处理之上支持流计算;后者则认为流计算技术是最基本的,在流计算的基础之上支持批处理。正因为这种架构上的不同,今后二者在能做的事情上会有一些细微的区别。比如在低延迟场景,Spark 基于微批处理的方式需要同步会有额外开销,因此无法在延迟上做到极致。在大数据处理的低延迟场景,Flink 已经有非常大的优势。
Spark和Flink的主要差别就在于计算模型不同。Spark采用了微批处理模型,而Flink采用了基于操作符的连续流模型。因此,对Apache Spark和Apache Flink的选择实际上变成了计算模型的选择,而这种选择需要在延迟、吞吐量和可靠性等多个方面进行权衡。
ExecutionEnvironment
StreamExecutionEnvironment 有界流 $ 无界流
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
//在当前测试环境下,如果没有设置并行度,会默认采用系统CPU的虚拟核数(4)
env.setParallelism(1);
//执行
env.execute();
流数据源:
//生产环境使用的比较多,有专门的数据源对象Properties Properties properties = new Properties(); properties.setProperty("bootstrap.servers", 127.0.0.1:9092); properties.setProperty("group.id", "consumer-group"); properties.setProperty("key.deserializer","org.apache.kafka.common.serialization.StringDeserializer"); properties.setProperty("value.deserializer","org.apache.kafka.common.serialization.StringDeserializer"); properties.setProperty("auto.offset.reset", "latest"); //生产环境中,一般用flink消费Kafka中的数据,完成实时数据计算 FlinkKafkaConsumer<Tuple2<String, String>> consumer = new FlinkKafkaConsumer<>( "kafkaTopic", new new SimpleStringSchema(), properties ); //将Kafka数据源绑定到flink中 DataStream stream = env.addSource(consumer); //打印输出控制台 stream.print();
Flink中可以将一个数据流转换为其他的数据流,转换过程中,数据流的类型也会发生变化,那么到底Flink支持什么样的数据类型呢,其实我们常用的数据类型,Flink都是支持的。比如:Long, String, Integer, Int, 元组,样例类,List, Map等。
Sink有下沉的意思,在Flink中所谓的Sink其实可以表示为将数据存储起来的意思,也可以将范围扩大,表示将处理完的数据发送到指定的存储系统的输出操作
之前我们一直在使用的print方法其实就是一种Sink
咱们可以将处理完的数据发送到Kafka消息队列中
添加Kafka依赖关系
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-connector-kafka_${scala.binary.version}</artifactId>
<version>${flink.version}</version>
</dependency>
主函数中添加sink:
FlinkKafkaProducer sink = new FlinkKafkaProducer<>("zpytest1", new SimpleStringSchema(), properties);
stream.addSink(sink);
bin/kafka-console-consumer.sh --bootstrap-server 127.0.0.1:9092 --topic flink-test
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。