Flink线上问题汇总篇(3)

我们线上运行的flink任务通过flink->kafka->redis 路线,结果最终入redis供前端人员展示使用。最近在给前端人员对接展示的过程中发现了一个比较头疼的问题,那就是任务刚开始运行时数据是正常的,运行一段时间之后flink汇总出来的数据会比实际的多,并且汇总出来了很多目前没有的分类。可能听起来比较难理解。

下面我举个例子来描述这种现象。我们的分类总共分为A、B、C、D四类,现在仅有A、B符合目前参与统计的条件。但是Flink汇总出来A、B、C三种数据。而且仅仅C的数据是多出来的,A、B分类的数据是正确的。这就让人头疼了,你说flink任务有问题吧它算出来的数据是准的,说没问题吧它算出来的又多了其他分类的数据!本着重启解决万难的想法我重启了flink任务,意料之外的是数据居然还是没对上。然后我开始分析数据看看多出来的数据都是些什么数,经过一阵脑细胞燃烧发现这些数据有两个共同点。其一是这些数据曾经符合统计条件现在不符合了,其二就是这些数据现在都应该是0。有了这两个条件组合我忽然想到了一个极大的可能那就是降到0之后没有触发flink的删除操作。按理说flink应该会触发。然后去排查代码发现我在最后输出结果的地方将flink删除的指令全部过滤掉了没有参与输出。至此真相大白。

flink中sink的数据像日志一样,更新操作就是先false后true。也就是我们理解的先删后插,但是我利用了redis的覆盖更新特性,为了减少结果输出量一股脑全把false拦截了。导致真实需删除的数据没有被删除。


上一篇:oracle实现行转列功能,并使用逗号进行隔开拼接,成为一条数据


下一篇:什么是JDBC,在上面时候会用到它?