KTable与GlobalKTable和leftJoin()vs outerJoin()之间有什么区别?

时间:2017-08-31 07:32:26

标签: apache-kafka-streams

在Kafka Stream库中,我想知道KTable和GlobalKTable之间的区别。

同样在KStream类中,有两种方法flow_from_directoryleftJoin()。这两种方法之间有什么区别?

我看过KStream.leftJoin,但没有找到确切的区别。

1 个答案:

答案 0 :(得分:21)

KTable VS GlobalKTable

KTable分割所有正在运行的Kafka Streams实例之间的数据,而GlobalKTable拥有每个实例上所有数据的完整副本。 GlobalKTable的缺点是显然需要更多内存。优点是,您可以使用流中的非键属性执行KStream-GlobalKTable连接。对于KStream-KTable连接和连接的非键流属性,只能通过提取join属性并在进行连接之前将其设置为键 - 这将导致在连接之前对流进行重新分区步骤计算。

但请注意,还存在语义差异:对于流表连接,Kafka Stream根据记录时间戳排列记录处理顺序。因此,对表的更新与您的流的记录一致。对于GlobalKTable,没有时间同步,因此更新到GlobalKTable并完全与流记录的处理分离(因此,您的语义变弱)。

有关详细信息,请参阅KIP-99: Add Global Tables to Kafka Streams

leftJoin()VS outerJoin()

关于左连接和外连接:它在数据库中分别是左外连接和全外连接。

对于左外连接,如果左侧的连接不匹配,您可能会“丢失”右输入流的数据。

对于(完整)外连接,不会删除任何数据,并且两个流的每个输入记录都将位于结果流中。