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

简介: 用flink流计算汇总数据,SUM操作后的结果惊现负数,搞了两天才搞定!

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

相关实践学习
基于Hologres+Flink搭建GitHub实时数据大屏
通过使用Flink、Hologres构建实时数仓,并通过Hologres对接BI分析工具(以DataV为例),实现海量数据实时分析.
实时计算 Flink 实战课程
如何使用实时计算 Flink 搞定数据处理难题?实时计算 Flink 极客训练营产品、技术专家齐上阵,从开源 Flink功能介绍到实时计算 Flink 优势详解,现场实操,5天即可上手! 欢迎开通实时计算 Flink 版: https://cn.aliyun.com/product/bigdata/sc Flink Forward Asia 介绍: Flink Forward 是由 Apache 官方授权,Apache Flink Community China 支持的会议,通过参会不仅可以了解到 Flink 社区的最新动态和发展计划,还可以了解到国内外一线大厂围绕 Flink 生态的生产实践经验,是 Flink 开发者和使用者不可错过的盛会。 去年经过品牌升级后的 Flink Forward Asia 吸引了超过2000人线下参与,一举成为国内最大的 Apache 顶级项目会议。结合2020年的特殊情况,Flink Forward Asia 2020 将在12月26日以线上峰会的形式与大家见面。
相关文章
|
SQL Java API
flink问题之state过期设置如何解决
Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。本合集提供有关Apache Flink相关技术、使用技巧和最佳实践的资源。
609 0
|
XML SQL 关系型数据库
Flink CDC产品常见问题之binlog 过期如何解决
Flink CDC(Change Data Capture)是一个基于Apache Flink的实时数据变更捕获库,用于实现数据库的实时同步和变更流的处理;在本汇总中,我们组织了关于Flink CDC产品在实践中用户经常提出的问题及其解答,目的是辅助用户更好地理解和应用这一技术,优化实时数据处理流程。
|
BI Apache 流计算
Apache Flink 概念介绍:有状态流式处理引擎的基石(二)| 学习笔记
快速学习 Apache Flink 概念介绍:有状态流式处理引擎的基石。
Apache Flink 概念介绍:有状态流式处理引擎的基石(二)| 学习笔记
|
存储 传感器 缓存
【Flink】(七)状态管理
【Flink】(七)状态管理
720 0
【Flink】(七)状态管理
|
存储 缓存 安全
eBay:Flink的状态原理讲一下……
eBay:Flink的状态原理讲一下……
406 0
eBay:Flink的状态原理讲一下……
|
存储 流计算
|
存储 Java 数据库
flink 状态后端详解
flink 状态后端详解
flink 状态后端详解
|
SQL 消息中间件 存储
字节跳动 Flink 状态查询实践与优化
字节跳动基础架构工程师马越在 FFA 2021 的演讲。
字节跳动 Flink 状态查询实践与优化
|
消息中间件 存储 SQL
【实时数仓篇】(04)利用 Flink 实现实时状态复用场景
【实时数仓篇】(04)利用 Flink 实现实时状态复用场景
548 0
【实时数仓篇】(04)利用 Flink 实现实时状态复用场景
|
消息中间件 存储 缓存
【Flink】(九)状态一致性、端到端的精确一次(ecactly-once)保证2
【Flink】(九)状态一致性、端到端的精确一次(ecactly-once)保证2
634 0
【Flink】(九)状态一致性、端到端的精确一次(ecactly-once)保证2

热门文章

最新文章