You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user-zh@flink.apache.org by 忝忝向仧 <15...@qq.com> on 2020/09/05 03:32:17 UTC
回复: 消费kafka数据乱序问题
这里有点不明白,假设源端是消费100,那么记录会是0,然后存100结果是变回100
两条记录同步过来就是0,100,那么根据主键取时间最最新一条记录(也就是100那条)是否就行了?
------------------ 原始邮件 ------------------
发件人: "user-zh" <ffxrqyzby@gmail.com>;
发送时间: 2020年9月4日(星期五) 晚上6:59
收件人: "user-zh"<user-zh@flink.apache.org>;"宁吉浩"<a986697521@dingtalk.com>;
主题: Re: 消费kafka数据乱序问题
两个方法
1. kafka 里面可以 keyby, partition 里面都是有序的, 所以每个用户处理都是有序的
2. 就是你说的在 flink 里面做乱序处理
宁吉浩 <a986697521@dingtalk.com.invalid> 于2020年9月4日周五 下午5:56写道:
> 我也遇到了和你一样的问题,也是两条数据有因果关系,必须有严格的先后顺序,我这边的业务不像银行那么严格;
> 我的解决办法是把迟到数据丢弃,然后进行业务计算;
> 另起一个程序把数据缓存在内存里,对数据排序,然后再度修正计算;
> 之前的实时+离线数仓用的办法,代码开发一次,但还要跑两次;
>
>
> ------------------------------------------------------------------
> 发件人:smq <374060171@qq.com>
> 发送时间:2020年9月4日(星期五) 17:35
> 收件人:wwj <wangweijun.sn@qq.com>; user-zh <user-zh@flink.apache.org>
> 主 题:回复:消费kafka数据乱序问题
>
>
> 换句话说,写进kafka的数据是同一个用户的两条,余额分别是0和100,就是我之前那个计算过程,这个计算操作在Oracle完成,我只负责把余额,也就是0或者100更新到kudu对应的余额字段,因为消费数据可能会乱序,先更新100,再更新0,这样导致存在kudu的数据是0,正确的数据最终应该是100
>
> ---原始邮件---
> 发件人: "wwj"<wangweijun.sn@qq.com&gt;
> 发送时间: 2020年9月4日(周五) 下午5:10
> 收件人: "smq"<374060171@qq.com&gt;;
> 主题: 回复:消费kafka数据乱序问题
>
>
>
> “假如说先处理了存钱,存上之后余额是100-100+100=100”&nbsp; 这句话没看懂,存上之后余额不应该是 100+100=200 吗?
>
>
>
>
>
>
>
>
> 原始邮件
>
>
> 发件人:"smq"< 374060171@qq.com &gt;;
>
> 发件时间:2020/9/4 16:40
>
> 收件人:"user-zh"< user-zh@flink.apache.org &gt;;
>
> 主题:消费kafka数据乱序问题
>
>
>
> 大家好
> &nbsp;
> &nbsp;现在碰到一个关于处理乱序的问题,业务场景是银行余额的更新,数据源是kafka,有一个账户余额字段,sink到kudu,更新客户余额.
>
> 如果对于同一个账户的多笔操作出现乱序,可能会导致客户余额不对。比如一个客户账户有100块,先消费100,然后存100,按照正常的数据处理顺序,帐户余额应该还是100的,假如说先处理了存钱,存上之后余额是100-100+100=100,然后处理消费100的那条数据,由于消费在前,这时这条数据对应的余额是100-100=0。
> &nbsp; 这样的话就出现了统计余额错误,请问想要按照事件时间处理数据是不是可以先keyby,然后用watermark.