|
场景是这样的:
数据要按 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
做去重。。。
请问有什么改进建议么?
|