admin管理员组文章数量:1130349
【实战
摘要
假设我们有一批订单数据实时接入kafka, flink需要对订单数据做处理,值得注意的是订单数据 要求绝对不可以重复处理。 考虑到订单数据上报到kafka的时候存在重复上报的可能性,因此需要我们flink处理的时候 避免进行重复处理。在flinksql 中我们有去重的方式,请参考flinksql 去重 。 但是我们本小结来讨论DataStream Api如何去重。
分析
我们很容易想到:假设订单的唯一主键就是order_id, 要想达到去重的效果应该可以想到用State 存储已经处理过的订单,新的订单来临的时候判断是否存在于State中,如果不存在则处理,存在则视为重复订单,需要放弃当前订单。
上面的思想理论上是没有问题的,但是实际上却会产生不小的问题。 上面的额分析中,state会缓存所有已经处理过的订单id, 要知道kakfa的数据是源源不断的, 那么也就意味着我们需要缓存的state 会越来越大, 没错这就像一个不断膨胀的炸弹,总有一天会炸掉。因此我们需要想别的方案。
【实战
摘要
假设我们有一批订单数据实时接入kafka, flink需要对订单数据做处理,值得注意的是订单数据 要求绝对不可以重复处理。 考虑到订单数据上报到kafka的时候存在重复上报的可能性,因此需要我们flink处理的时候 避免进行重复处理。在flinksql 中我们有去重的方式,请参考flinksql 去重 。 但是我们本小结来讨论DataStream Api如何去重。
分析
我们很容易想到:假设订单的唯一主键就是order_id, 要想达到去重的效果应该可以想到用State 存储已经处理过的订单,新的订单来临的时候判断是否存在于State中,如果不存在则处理,存在则视为重复订单,需要放弃当前订单。
上面的思想理论上是没有问题的,但是实际上却会产生不小的问题。 上面的额分析中,state会缓存所有已经处理过的订单id, 要知道kakfa的数据是源源不断的, 那么也就意味着我们需要缓存的state 会越来越大, 没错这就像一个不断膨胀的炸弹,总有一天会炸掉。因此我们需要想别的方案。
本文标签: 实战
版权声明:本文标题:【实战 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://it.en369.cn/jiaocheng/1700079600a337329.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。


发表评论