Exactly-Once 语义在Flink中的实现|青训营笔记

101 阅读2分钟

Exactly-Once 语义在Flink中的实现|青训营笔记

这是我参与【第四届青训营-大数据场】笔记创作活动的第4天

数据流和动态表

  • SQL处理的表是有界的,它的执行查询可以访问完整的数据,执行时间批处理查询产生固定大小结果后终止
  • 流处理是一个无限原组序列,它的执行查询无法访问所有的数据,只要查询不断更新结果,他的执行时间永不停止
  • 需要存储每个用户的url计数,以便能够增加该计数并在输入表接收新行时发送新结果

image.png

    • 动态表   随时间不断变化的表,在任意时刻,可以像查询静态批处理表一样查询它们
  • \动态表与表示批处理数据的静态表不同,动态表是随时间变化的,可以向查询静态批处理表一样查询他们

  • 在任何时候连续查询的结果在语义上与批处理模式在输入表快照上执行的相同,查询的结果相同

  • 查询从不终止

  • 查询结果会不断更新,并且会产生一个新的动态表

  • 结果的动态表也可转换成输出的实时流

  • 产生一个新的动态表

image.png

  • Stream: 数据流
  • Dynamic Table: 动态表
  • Continuous Queries: 连续查询
  • Append-only Stream: Append-only 流(只有 INSERT 消息)
  • Retract Stream: Retract 流(同时包含 INSERT 消息和 DELETE 消息)
  • Upsert Stream:: Upsert 流(同时包含 UPSERT 消息和 DELETE 消息)
  • Changelog: 包含 INSERT/UPDATE/DELETE 等的数据流
  • image.png
  1. 第一个查询更新先前输出的结果及定义结果表的changelog流包含insert和update操作
  2. 第二个查询只附加到结果表即结果表的changelog流只包含insert操作
  • Upsert Stream:: Upsert 流(同时包含 UPSERT 消息和 DELETE 消息)