本篇文章为你整理了Flink(flink是干嘛的)的详细内容,包含有flink和spark的区别 flink是干嘛的 flink cdc flink面试题 Flink,希望能帮助你了解 Flink。
案例来源 https://github.com/apache/flink-training/blob/release-1.14/hourly-tips/README_zh.md
基于出租车付费事件流计算出每小时赚取最多小费的司机,最简单的方法是通过两个步骤来解决这个问题:首先使用一个小时长的窗口来计算每个司机在一小时内的总小费,然后从该窗口结果流中找到每小时总小费最多的司机。
结果输出:
每小时产生一个 HourlyTip对象 记录的数据流。 这个记录应包含该小时结束时的时间戳、 该小时内获得小费最多的司机的 driverId 以及他的实际小费总数。
public class HourlyTip {
* 小时结束时的时间戳
private Long eventTime;
* 司机id driverId
private Long driverId;
* 该小时获得的小费总数
private Float tips;
// 初始化环境
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
// 定义出租车-车费数据源
KafkaSource TaxiFare fareSource = KafkaSource. TaxiFare builder()
.setBootstrapServers("192.168.0.192:9092")
.setTopics("TOPIC_FARE")
.setGroupId("TEST_GROUP")
.setClientIdPrefix("fare") // 避免kafka clientId重复
.setStartingOffsets(OffsetsInitializer.latest())
.setValueOnlyDeserializer(new TaxiFareDeserialization())
.build();
DataStreamSource TaxiFare fareStream = env.fromSource(fareSource, WatermarkStrategy. TaxiFare forMonotonousTimestamps().withTimestampAssigner((fare, t) - fare.getStartTime()), "fare source");
// 按司机分组,对每小时内的数据进行统计,求出每个司机每小时的总小费
SingleOutputStreamOperator HourlyTip hourlyTipsStream = fareStream.keyBy(TaxiFare::getDriverId)
.window(TumblingEventTimeWindows.of(Time.hours(1)))
.process(new AddTipsFunction());
* keyBy后数据分流,window是把不同的key分开聚合成窗口
* 而windowAll是把所有的key都聚合起来,所以windowAll的并行度只能为1,而window可以有多个并行度
// 把所有key汇总起来,找出每个小时总小费最多的司机
SingleOutputStreamOperator HourlyTip hourlyMaxStream = hourlyTipsStream.windowAll(TumblingEventTimeWindows.of(Time.hours(1))).max("tips");
以上就是Flink(flink是干嘛的)的详细内容,想要了解更多 Flink的内容,请持续关注盛行IT软件开发工作室。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。