Flink线上问题汇总篇(1)-状态过期导致的sum结果负数问题

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
简介: 用flink流计算汇总数据,SUM操作后的结果惊现负数,搞了两天才搞定!

flink任务上线运行有一段时间了一直很稳定,这两天忽然发现有些“丢数据”的现象。这是怎么回事呢?用这篇文章记录一下踩坑之路。
任务要求:
我们这个任务要达到的效果是汇总每月的业务量,需要按照具体分类分组。业务量绝对不会出现负数的问题,但是现在汇总出来的居然存在负数!肯定是某个环节出现了问题。
排查思路:
我这个任务使用的是flink的table api操作比较简单。最先发现数据不正常是发现flink汇总出来的数据比实际要少,然后就开始去跟踪中间件kafka中的消息。意外的发现有些分类下的数据居然是负数!当时看到非常震惊。然后开始排查flink代码,这块计算就是简单分组后进行sum。sum怎么会出现负数呢?百思不得其解,最终经过大半天的天马行空的猜想得出个结论-玄学!当然了肯定不是玄学,所谓玄学往往出问题就在我们认为这个东西绝对不会有问题,但是现在有问题了。我们就将其归类为玄学。于是按照这个想法我开始慢慢回归问题本身。
问题本身就在于SUM出现了负数,我觉得很难理解。所以那就干脆不理解,就认为SUM不可能是负数,那出现负数的原因只能是因为在做减法的时候减到负数。有了这个思路之后我开始联想到flink的状态保存有个失效机制。如果该状态迟迟没有更新直到超过我们设置的过期时间,这个状态就会过期。当flink真正监听到该状态需要被删除时又会进行删除。如此一来一个状态被删了两次就会出现负数。
解决办法:
setIdleStateRetentionTime()使用此方法设定过期时间。将该时间设置大于任务所需时间即可解决负数问题。但是这样写有弊端就是会保存很多冗余的状态。不会实时的清除。这个我们后续在讨论。
希望本篇文章可以对同是flink小白的你有所帮助。
转载请注明出处。

相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
Linux入门到精通
本套课程是从入门开始的Linux学习课程,适合初学者阅读。由浅入深案例丰富,通俗易懂。主要涉及基础的系统操作以及工作中常用的各种服务软件的应用、部署和优化。即使是零基础的学员,只要能够坚持把所有章节都学完,也一定会受益匪浅。
相关文章
|
5月前
|
SQL Java API
flink问题之state过期设置如何解决
Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。本合集提供有关Apache Flink相关技术、使用技巧和最佳实践的资源。
409 0
|
5月前
|
XML SQL 关系型数据库
Flink CDC产品常见问题之binlog 过期如何解决
Flink CDC(Change Data Capture)是一个基于Apache Flink的实时数据变更捕获库,用于实现数据库的实时同步和变更流的处理;在本汇总中,我们组织了关于Flink CDC产品在实践中用户经常提出的问题及其解答,目的是辅助用户更好地理解和应用这一技术,优化实时数据处理流程。
|
BI Apache 流计算
Apache Flink 概念介绍:有状态流式处理引擎的基石(二)| 学习笔记
快速学习 Apache Flink 概念介绍:有状态流式处理引擎的基石。
229 0
Apache Flink 概念介绍:有状态流式处理引擎的基石(二)| 学习笔记
|
存储 缓存 安全
eBay:Flink的状态原理讲一下……
eBay:Flink的状态原理讲一下……
218 0
eBay:Flink的状态原理讲一下……
|
存储 流计算
|
存储 Java 数据库
flink 状态后端详解
flink 状态后端详解
flink 状态后端详解
|
存储 传感器 缓存
【Flink】(七)状态管理
【Flink】(七)状态管理
512 0
【Flink】(七)状态管理
|
SQL 消息中间件 存储
字节跳动 Flink 状态查询实践与优化
字节跳动基础架构工程师马越在 FFA 2021 的演讲。
字节跳动 Flink 状态查询实践与优化
|
消息中间件 存储 SQL
【实时数仓篇】(04)利用 Flink 实现实时状态复用场景
【实时数仓篇】(04)利用 Flink 实现实时状态复用场景
375 0
【实时数仓篇】(04)利用 Flink 实现实时状态复用场景
|
消息中间件 存储 缓存
【Flink】(九)状态一致性、端到端的精确一次(ecactly-once)保证2
【Flink】(九)状态一致性、端到端的精确一次(ecactly-once)保证2
438 0
【Flink】(九)状态一致性、端到端的精确一次(ecactly-once)保证2