废话不多说,关于kafka的其他东西,不详细叙述了,有很多,本文主要基于窗口的,网上的相关案例比较少
我用到的窗口时timeWindow,滚动窗口,kafkaStream,或者说很多流式计算的窗口其实都可以分为3种,会话,滚动,滑动,区别网上很多。
timeWindow有两个参数,一个是advanceby,一个时of,也就是窗口的长度
TimeWindows timeWindows = TimeWindows.of(30000); //此处是窗口步进时间 timeWindows.advanceBy(30000);
我主要用aggregrate这个函数,就是进行窗口聚合的
第一个是窗口聚合的初始值,第二个是进行聚合的聚合器,第三个就是窗口时间,第四个是类似于序列化的东西
KTable aggregate = groupedStream.aggregate(initializer, aggregator, timeWindows, resultSerde);
这个是初始化函数,可以定义你的初始值
public class MyInitializer implements Initializer { @Override public VarData apply() {
这个是聚合函数的具体实行方法,消息键,值,和上次聚合后传过来的值,此处返回值,就是本次聚合后的值,我将其封装为vardata
public VarData apply(Object key, Object value, Object vardata) {
在得到聚合结果后,就可以根据具体的结果,将结果进行输出打印,或者是直接放到其他topic当中