我读到了kafka流中连接的一些限制,比如ktable ktable non key join或ktable globalktable。。。。
我发现Flink似乎支持这一切。据我所知,动态表听起来像ktable。
我想知道,如果首先,他们是同一个概念,然后不知何故,Flink如何实现这一点,我找不到有关底层基础设施的文档。例如,我没有发现在globalktable中发生的广播连接的概念。底层基础设施是否实现了动态表分布式??
我读到了kafka流中连接的一些限制,比如ktable ktable non key join或ktable globalktable。。。。
我发现Flink似乎支持这一切。据我所知,动态表听起来像ktable。
我想知道,如果首先,他们是同一个概念,然后不知何故,Flink如何实现这一点,我找不到有关底层基础设施的文档。例如,我没有发现在globalktable中发生的广播连接的概念。底层基础设施是否实现了动态表分布式??
2条答案
按热度按时间wnavrhmk1#
我不是100%肯定,因为我不知道所有的细节Flink的“动态表”的概念,但在我看来,这是一样的
KTable
在Kafka河。然而,两者之间有区别
KTable
和一个GlobalKTable
在Kafka的溪流中,两者不是完全一样的东西(1) aKTable
在GlobalKTable
复制/广播(2) aKTable
事件时间同步吗GlobalKTable
不是。出于同样的原因GlobalKTable
启动时完全加载/引导KTable
根据changelog记录事件时间戳(与其他输入流的事件时间戳相关)进行更新。此外,在处理对KTable
在更新事件时是否同步事件时间GlobalKTable
不是(即,它们是立即应用的,因此可以认为是不确定的)。最后一个注解:kafka streams添加了外键
KTable-KTable
加入即将发布的2.4版本。还有一张票要加KTable-GlobalKTabel
但此功能尚未经常请求,因此尚未添加:https://issues.apache.org/jira/browse/kafka-4628ioekq8ef2#
Flink动态表与Kafka动态表
KTable
都不一样。在flink中,动态表是一个非常通用和广泛的概念,即随时间演化的表。这包括任意更改(
INSERT
,DELETE
,UPDATE
). 动态表不需要主键或唯一属性,但它可能有主键或唯一属性。一
KStream
是一种特殊类型的动态表,即只接收INSERT
更改,即一个不断增长的、仅附加的表。一
KTable
是另一种类型的动态表,即具有唯一键并随时间变化的动态表INSERT
,DELETE
,和UPDATE
钥匙上的变化。flink在动态表上支持以下类型的联接。请注意,对kafka连接的引用可能不是100%准确的(很乐意修复错误!)。
时间窗口连接应与ksql的连接相对应
KStream
-KStream
连接时态表连接类似于ksql
KStream
-KTable
连接。两个表之间的时态关系需要在查询中显式指定,以便能够在批处理/脱机数据上以相同的语义运行相同的查询。常规连接比ksql更通用
KTable
-KTable
连接,因为它们不需要输入表具有唯一键。此外,flink不区分主键联接和外键联接,但要求联接是相等联接,即至少有一个相等 predicate 。在这一点上,streamingsqlplanner不支持广播前向连接(我认为应该大致对应于广播前向连接)KTable
-GlobalKTable
连接)。