Flink Dynamic Table vs Kafka Stream Ktable?

Flink Dynamic Table vs Kafka Stream Ktable?

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

我发现Flink好像都支持了。根据我的阅读,A dynamic Table 听起来像 KTable。

我想知道首先,它们是否是相同的概念,然后 Flink 是如何实现的,我找不到关于底层基础设施的文档。例如,我没有发现 GlobalKtable 发生的广播连接的概念。底层基础设施是否实现动态table分布式??

我不是 100% 确定,因为我不知道 Flink 的 "dynamic table" 概念的所有细节,但在我看来它与 Kafka Streams 中的 KTable 相同。

但是,Kafka Streams 中的 KTableGlobalKTable 是有区别的,两者不是一回事。 (1) KTable 是 distributed/sharded 而 GlobalKTable 是 replicated/broadcasted。 (2) KTable 是事件时间同步的,而 GlobalKTable 不是。出于同样的原因,GlobalKTable 在启动时完全 loaded/bootstrapped 而 KTable 在适当的时候根据变更日志记录事件时间戳进行更新(与其他输入流的事件时间戳相关) .此外,在处理过程中,对 KTable 的更新是事件时间同步的,而对 GlobalKTable 的更新则不是(即,它们是立即应用的,因此可以被认为是不确定的)。

最后说明:Kafka Streams 在即将发布的 2.4 版本中添加了外键 KTable-KTable 连接。还有一个添加 KTable-GlobalKTabel 加入的票证,但这个功能还没有被经常请求,因此还没有添加:https://issues.apache.org/jira/browse/KAFKA-4628

Flink的动态table和Kafka的KTable不一样

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

  • A KStream 是一种特殊类型的动态 table,即仅接收 INSERT 变化的动态 table,即不断增长,仅附加 table.

  • A KTable 是另一种类型的动态 table,即具有唯一键并随 INSERT 变化的动态 table, DELETEUPDATE 键值变化。

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

  • Time-windowed joins应该对应KSQL的KStream-KStream joins
  • Temporal table joins 类似于 KSQL 的 KStream-KTable 连接。两个 table 之间的时间关系需要在查询中明确指定,以便能够 运行 对 batch/offline 数据具有相同语义的相同查询。
  • Regular joins 比 KSQL 的 KTable-KTable 连接更通用,因为它们不需要输入 table独特的钥匙。此外,Flink 不区分主键或外键连接,而是要求连接是等值连接,即至少有一个相等谓词。在这一点上,流式 SQL 规划器不支持广播转发连接(我认为这应该大致对应于 KTable-GlobalKTable 连接)。