南通seo公司网站广东深圳网站建设微信商城运营
web/
2025/10/4 18:03:57/
文章来源:
南通seo公司网站,广东深圳网站建设微信商城运营,南平企业网站建设,上海域名网站吗1.回撤流定义#xff08;RetractStream#xff09;
Flink 的回撤流是指在 Flink 的流处理算法中#xff0c;撤回已经发送到下游节点的数据。这是因为在实际应用场景中#xff0c;有些错误数据可能会发送到下游节点#xff0c;因此需要回撤流以保证数据的准确性。
回撤流…1.回撤流定义RetractStream
Flink 的回撤流是指在 Flink 的流处理算法中撤回已经发送到下游节点的数据。这是因为在实际应用场景中有些错误数据可能会发送到下游节点因此需要回撤流以保证数据的准确性。
回撤流可以理解为流式场景下对数据进行更新这里的更新数据并不是将发往下游的历史数据进行更改要知道已经发往下游的消息是追不回来的。更新历史数据的含义是在得知某个Key接在Key BY / Group By后的字段对应数据已经存在的情况下如果该Key对应的数据再次到来会生成一条delete消息和一条新的insert消息发往下游。
在 Flink 中回撤流的功能可以通过 Flink 提供的事务性 API 来实现。该 API 可以对数据流进行事务支持以确保数据的准确性。在发生错误时可以回撤事务中的数据以保证数据的准确性。 总的来说Flink 的回撤流是一个非常有用的功能可以用于保证数据准确性和可靠性同时也可以提高 Flink 的稳定性和可靠性。
2.回撤流示例
流场景下的一个词频统计例子 没有retract会导致最终结果不正确 3.聚合算子回撤
聚合算子中包含两种状态state 存储中间结果状态如count(id)值、cntState存储key对应的消息数量聚合消息1回撤消息-1。state用于不断更新中间聚合状态cntState用于判断向下游发送当前新的聚合消息还是上一次聚合消息对应的回撤消息。
4. Sink算子回撤
官方对于sink的插入模式有以下三种描述
Append 模式该模式用户在定义Sink的DDL时候不定义PK在Apache Flink内部生成的所有只有INSERT语句Upsert 模式该模式用户在定义Sink的DDL时候可以定义PK在Apache Flink内部会根据事件打标(retract机制)生成INSERT/UPDATE和DELETE 语句,其中如果定义了PK UPDATE语句按PK进行更新如果没有定义PK UPDATE会按整行更新Retract 模式该模式下会产生INSERT和DELETE两种信息Sink Connector 根据这两种信息构造对应的数据操作指令
Sink算子是否支持回撤流要根据sink数据源的特性而定。例如kafka sink只支持append模式jdbc sink在Flink1.11中只支持upsert不配置primary key会报错。这都跟sink数据源的特性密切相关。
以Kafka Sink为例Kafka是利用log中顺序追加消息的方式存储消息因此只支持append模式网上有修改kafka sink connector以支持upsert的方法将聚合算子中的回撤消息false过滤掉只留下聚合消息true并写入kafka带来的现象就是一个聚合结果会多次出现在kafka中算是一种阉割版的upsert模式。
结论聚合算子和Sink算子关于回撤的概念相似但原理不同且使用场景也不同聚合算子的回撤用于聚合状态的更新Sink算子的回撤则更多的是应用于CDC场景。 聚合算子的撤回机制保证了FlinkSQL持续查询/增量查询的正确语义而Sink算子的回撤机制保证了CDC场景下的正确语义。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/86912.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!