作业并行性(4,8,16):[自动生成源]-->[Map1]-->[滚动窗口(10s)]-->[Map2]-->[接收器]
Flink窗口性能eps 4p、8p、16p
作业以上的性能最高达到了每秒50k+-左右,不管我如何将集群缩放成4-16的并行度。
闪烁性能无窗口4p、8p
我已经删除了窗口的逻辑,以消除瓶颈性能的应用程序逻辑,但似乎窗口仍然导致我的整个流性能下降,即使该窗口只是一个通过函数。
这个屏幕截图显示了没有窗口的作业和启用空窗口的作业的性能。
进一步的研究表明这是由于keyBy()对keyedStream操作造成的,当流被键控时,性能下降了近40%,并且如果有多个keyedStream则性能继续下降。
DataStream<Tuple2<String, MyObj>> testStream = finalizedStream
.map(new RichMapFunction<MyObj, Tuple2<String, MyObj>>() {
@Override
public Tuple2<String, MyObj> map(MyObj value) throws Exception {
return new Tuple2<String, MyObj>(value.getCustomKey(), value);
}
});
KeyedStream<Tuple2<String, MyObj>, Tuple> keyedStream = testStream.keyBy(0);
keyedStream.map(new MapFunction<Tuple2<String, MyObj>, MyObj>() {
@Override
public MyObj map(Tuple2<String, MyObj> tuple) throws Exception {
return tuple.f1;
}
}).name("keyed stream");
反正我能让演出更好?看来使用键控是不可避免的。我也不确定为什么我们在我们的环境中也尝试扩展工作,性能仅仅是一个数字,而不管我们提供了多少并行性。CPU利用率和内存显示,当使用nmon监视时,它并不处于关键状态。
任何投入和帮助将非常感谢。
有人能帮我理解一下在flink中的窗口(会话)是什么时候和如何发生的吗?或者样品是如何加工的? 例如:假设定义的时间窗口是30秒,如果一个事件在t时间到达,另一个事件在t+30,那么这两个事件都将被处理,但是在t+31到达的事件将被忽略。 如果我说的不对,请纠正。 上面的问题是:如果一个事件在t时间到达,而另一个事件在t+3时间到达,是否还会等待整个30秒来汇总并最终确定结果? DTO: ====
我正在运行一个简单的示例来测试基于EventTime的Windows。我能够生成带有处理时间的输出,但当我使用EventTime时,没有输出。请帮助我明白我做错了什么。
我是Flink的新手,需要方法的帮助。我有时间颗粒度为5分钟的事件流。我想通过调用rest API来获取事件的元数据,其中包含过去1小时数据点的历史事件,即过去12点(5分钟时间颗粒度)。 e、 g事件的时间戳为10:00、10:05、10:10、10:15等,因此如果我想获取时间戳为11:00的事件元数据,我将调用send发送所有时间戳为10:00、10:05、10:10、10:15的事件。。1
我有一个关于在Kinesis流中分片数据的问题。我想在向我的kinesis流发送用户数据时使用一个随机分区键,这样碎片中的数据是均匀分布的。为了使这个问题更简单,我想通过在Flink应用程序中键入用户ID来聚合用户数据。
我需要根据一个键连接两个事件源。事件之间的间隔最长可达1年(即具有id1的event1可能在今天到达,而来自第二个事件源的具有id1的相应event2可能在一年后到达)。假设我只想输出连接的事件输出。 我正在探索在RocksDB后端使用Flink的选项(我遇到了表API,它们似乎适合我的用例)。我找不到做这种长窗口连接的引用体系结构。我希望系统一天能处理大约2亿个事件。 关于处理这种长窗口连接的任
2)我研究了循环分区的重新平衡。假设我建立了一个集群,如果我的源的并行度为1,如果我进行了重新平衡,我的数据是否会在机器之间进行重排以提高性能?如果是这样,是否有一个特定的端口将数据传送到集群中的其他节点? 3)状态维护有什么限制吗?我计划维护一些用户id相关的数据,这些数据可能会变得很大。我读到flink使用rocks db来维护状态。只是想检查一下是否有限制可以维护多少数据? 4)同样,如果数