我们通常在写Flink程序的时候都会遇到keyBy,比如按照某条数据的某个字段进行分类计算,或者计算pv,还有需要用到Flink定时器的高级功能。
下面我们根据keyby的源码,看下keyBy的用法(本博客基于Flink1.13)
源码有5种方式定义keyBy, 但是其中的2种已经不用了,如果用户想灵活定义Flink分组计算的key,建议用第一种自定义KeySelector的方式
我们先来看下第一种keyBy的源码,需要自定义KeySelector
public <K> KeyedStream<T, K> keyBy(KeySelector<T, K> key) { Preconditions.checkNotNull(key); return new KeyedStream<>(this, clean(key)); }
然后我们再看下KeySelector的源码,是个接口,只有一个实现的方法,接口上有泛型,代表IN代表输入的数据的类型,KEY代表最后返回的key的类型
@Public @FunctionalInterface public interface KeySelector<IN, KEY> extends Function, Serializable { KEY getKey(IN va