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 smq <37...@qq.com> on 2020/09/04 08:40:02 UTC

消费kafka数据乱序问题

大家好
&nbsp; &nbsp;现在碰到一个关于处理乱序的问题,业务场景是银行余额的更新,数据源是kafka,有一个账户余额字段,sink到kudu,更新客户余额.
如果对于同一个账户的多笔操作出现乱序,可能会导致客户余额不对。比如一个客户账户有100块,先消费100,然后存100,按照正常的数据处理顺序,帐户余额应该还是100的,假如说先处理了存钱,存上之后余额是100-100+100=100,然后处理消费100的那条数据,由于消费在前,这时这条数据对应的余额是100-100=0。
&nbsp; 这样的话就出现了统计余额错误,请问想要按照事件时间处理数据是不是可以先keyby,然后用watermark.

回复:消费kafka数据乱序问题

Posted by Shuai Xia <jk...@dingtalk.com.INVALID>.
可以通过设置Key的方式保证同一个账户的数据是有序的


------------------------------------------------------------------
发件人:Danny Chan <yu...@gmail.com>
发送时间:2020年9月8日(星期二) 11:12
收件人:user-zh <us...@flink.apache.org>
主 题:Re: 消费kafka数据乱序问题

你的 source 消费单/多 partition 数据相对 partition 来说仍然是有序的 只是 source 和下游 operator 如果存在数据 shuffle 就会破坏顺序,目前想保序,一种办法是 source 的并发和下游保持一致。

Best,
Danny Chan
在 2020年9月4日 +0800 PM4:40,smq <37...@qq.com>,写道:
> 大家好
> &nbsp; &nbsp;现在碰到一个关于处理乱序的问题,业务场景是银行余额的更新,数据源是kafka,有一个账户余额字段,sink到kudu,更新客户余额.
> 如果对于同一个账户的多笔操作出现乱序,可能会导致客户余额不对。比如一个客户账户有100块,先消费100,然后存100,按照正常的数据处理顺序,帐户余额应该还是100的,假如说先处理了存钱,存上之后余额是100-100+100=100,然后处理消费100的那条数据,由于消费在前,这时这条数据对应的余额是100-100=0。
> &nbsp; 这样的话就出现了统计余额错误,请问想要按照事件时间处理数据是不是可以先keyby,然后用watermark.

Re:消费kafka数据乱序问题

Posted by Danny Chan <yu...@gmail.com>.
你的 source 消费单/多 partition 数据相对 partition 来说仍然是有序的 只是 source 和下游 operator 如果存在数据 shuffle 就会破坏顺序,目前想保序,一种办法是 source 的并发和下游保持一致。

Best,
Danny Chan
在 2020年9月4日 +0800 PM4:40,smq <37...@qq.com>,写道:
> 大家好
> &nbsp; &nbsp;现在碰到一个关于处理乱序的问题,业务场景是银行余额的更新,数据源是kafka,有一个账户余额字段,sink到kudu,更新客户余额.
> 如果对于同一个账户的多笔操作出现乱序,可能会导致客户余额不对。比如一个客户账户有100块,先消费100,然后存100,按照正常的数据处理顺序,帐户余额应该还是100的,假如说先处理了存钱,存上之后余额是100-100+100=100,然后处理消费100的那条数据,由于消费在前,这时这条数据对应的余额是100-100=0。
> &nbsp; 这样的话就出现了统计余额错误,请问想要按照事件时间处理数据是不是可以先keyby,然后用watermark.