去重后相加的流程怎样设计效率更好一些?

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

去重后相加的流程怎样设计效率更好一些?

Kevin Liao
场景是这样的:

数据要按 id 字段去重,然后再根据其他 field 做 key 然后对其中数值字段相加后输出,大概是

datastream.keyby("id").filter(new DeduplicateFilter()).keyby("field2",
"field3").window(TumblingEventTimeWindows.of(Time.minutes(1))).aggregate(...)

其中DeduplicateFilter继承了 RichFunction 继续 MapState 做去重,

但这个方案实测性能比较差(如果不做第一个 keyby 以及DeduplicateFilter性能大约提高 10 倍),从web ui 来看似乎是两次
keyby 导致了更多的传输导致的

而windowedStream 下 aggregate reduce 等函数都不支持RichFunction,也就不能在相加的环节使用 State
做去重。。。

请问有什么改进建议么?