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那条)是否就行了?






------------------&nbsp;原始邮件&nbsp;------------------
发件人:                                                                                                                        "user-zh"                                                                                    <ffxrqyzby@gmail.com&gt;;
发送时间:&nbsp;2020年9月4日(星期五) 晚上6:59
收件人:&nbsp;"user-zh"<user-zh@flink.apache.org&gt;;"宁吉浩"<a986697521@dingtalk.com&gt;;

主题:&nbsp;Re: 消费kafka数据乱序问题



两个方法
1. kafka 里面可以 keyby, partition 里面都是有序的, 所以每个用户处理都是有序的
2. 就是你说的在 flink 里面做乱序处理

宁吉浩 <a986697521@dingtalk.com.invalid&gt; 于2020年9月4日周五 下午5:56写道:

&gt; 我也遇到了和你一样的问题,也是两条数据有因果关系,必须有严格的先后顺序,我这边的业务不像银行那么严格;
&gt; 我的解决办法是把迟到数据丢弃,然后进行业务计算;
&gt; 另起一个程序把数据缓存在内存里,对数据排序,然后再度修正计算;
&gt; 之前的实时+离线数仓用的办法,代码开发一次,但还要跑两次;
&gt;
&gt;
&gt; ------------------------------------------------------------------
&gt; 发件人:smq <374060171@qq.com&gt;
&gt; 发送时间:2020年9月4日(星期五) 17:35
&gt; 收件人:wwj <wangweijun.sn@qq.com&gt;; user-zh <user-zh@flink.apache.org&gt;
&gt; 主 题:回复:消费kafka数据乱序问题
&gt;
&gt;
&gt; 换句话说,写进kafka的数据是同一个用户的两条,余额分别是0和100,就是我之前那个计算过程,这个计算操作在Oracle完成,我只负责把余额,也就是0或者100更新到kudu对应的余额字段,因为消费数据可能会乱序,先更新100,再更新0,这样导致存在kudu的数据是0,正确的数据最终应该是100
&gt;
&gt; ---原始邮件---
&gt; 发件人: "wwj"<wangweijun.sn@qq.com&amp;gt;
&gt; 发送时间: 2020年9月4日(周五) 下午5:10
&gt; 收件人: "smq"<374060171@qq.com&amp;gt;;
&gt; 主题: 回复:消费kafka数据乱序问题
&gt;
&gt;
&gt;
&gt; “假如说先处理了存钱,存上之后余额是100-100+100=100”&amp;nbsp; 这句话没看懂,存上之后余额不应该是 100+100=200 吗?
&gt;
&gt;
&gt;
&gt;
&gt;
&gt;
&gt;
&gt;
&gt; 原始邮件
&gt;
&gt;
&gt; 发件人:"smq"< 374060171@qq.com &amp;gt;;
&gt;
&gt; 发件时间:2020/9/4 16:40
&gt;
&gt; 收件人:"user-zh"< user-zh@flink.apache.org &amp;gt;;
&gt;
&gt; 主题:消费kafka数据乱序问题
&gt;
&gt;
&gt;
&gt; 大家好
&gt; &amp;nbsp;
&gt; &amp;nbsp;现在碰到一个关于处理乱序的问题,业务场景是银行余额的更新,数据源是kafka,有一个账户余额字段,sink到kudu,更新客户余额.
&gt;
&gt; 如果对于同一个账户的多笔操作出现乱序,可能会导致客户余额不对。比如一个客户账户有100块,先消费100,然后存100,按照正常的数据处理顺序,帐户余额应该还是100的,假如说先处理了存钱,存上之后余额是100-100+100=100,然后处理消费100的那条数据,由于消费在前,这时这条数据对应的余额是100-100=0。
&gt; &amp;nbsp; 这样的话就出现了统计余额错误,请问想要按照事件时间处理数据是不是可以先keyby,然后用watermark.