Flink动态表与Kafka流Ktable?

Maa*_*mon 5 apache-flink apache-kafka-streams

我正在阅读有关kafka流中的连接的当前几个限制,例如Ktable KTable非键连接或KTable GlobalKTable...。

我发现Flink似乎支持所有这些功能。根据我的阅读,动态表听起来像KTable。

我首先想知道它们是否是相同的概念,然后以某种方式Flink如何实现这一点,但我找不到有关基础结构的文档。例如,我没有发现GlobalKtable发生的广播联接的概念。实现动态表的基础架构是否已分发?

Fab*_*ske 6

Flink 的动态表和 Kafka 的KTable不一样。

在 Flink 中,动态表是一个非常通用和广泛的概念,即随时间演化的表。这包括任意更改 ( INSERT, DELETE, UPDATE)。动态表不需要主键或唯一属性,但它可能有一个。

  • AKStream是一种特殊类型的动态表,即只接收INSERT变化的动态表,即不断增长的仅追加的表。

  • 一个KTable是另一种类型的动态表的,即具有独特的键和变化的动态表INSERTDELETE以及UPDATE在关键的变化。

Flink 支持以下类型的动态表连接请注意,对 Kafka 连接的引用可能不是 100% 准确(很高兴修复错误!)。

  • 时间窗口连接应该对应于 KSQL 的KStream-KStream连接
  • 临时表连接类似于 KSQL 的KStream-KTable连接。需要在查询中明确指定两个表之间的时间关系,以便能够对批处理/离线数据运行具有相同语义的相同查询。
  • 定期加入比KSQL的更通用的KTable-KTable加入,因为它们不需要输入表有独特的密钥。此外,Flink 不区分主键或外键连接,但要求连接是等连接,即至少有一个相等谓词。此时,流式 SQL 规划器不支持广播转发连接(我认为应该大致对应于KTable-GlobalKTable连接)。

  • 对我来说听起来很准确——在我自己的回答中,我说“两者似乎是相同的”,因为我专注于“表”方面,并跳过了 Flink 使用动态表来建模流的部分。最好澄清这两个概念如何相互映射。 (2认同)