在flink sql的任务开发中,会大量使用groupBy聚合数据,但是下一些场景回发现使用groupBy会报错,我自己在刚开发flink sql任务不久,发现这个问题同样的写法,有的地方成功有的地方失败,有一段时间感觉很疑惑。
下面是使用 sink kafka的报错信息
sql parser error: AppendStreamTableSink doesn't support consuming update changes which is produced by node GroupAggregate(groupBy=[log_map], select=[log_map])
从报错信息来看,是因为sink kakfa不支持持续更新,什么意思呢?
groupBy算子 *** 作输出的数据,要覆盖上一次的数据,但是kafka本身的特性是不支持更新的,所以在sink数据的时候我们要注意数据存储容器的特性。判断是否可以使用groupBy,通过判断存储数据的容器是否支持数据更新,一支持数据更新的数据库,比如mysql、es、clickhouse,我们就可以使用groupBy, 对应的filnk-connector,有update sink,生产更新语句。
2、窗口聚合虽然sink-kafka不支持持续更新,如果我们有业务场景需求,可以做局部的聚合也就是窗口聚合,在窗口内的数据聚合输出一次结果,这样就可以把部分聚合数据写入到kafka。
INSERT INTO kafka_sink_table SELECT COUNT(1) cnt FROM kafka_source_table GROUP BY TUMBLE(proctime(), INTERVAL '10' second)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)