Aji*_*gre 10 apache-kafka-streams
在Kafka Stream库中,我想知道KTable和GlobalKTable之间的区别.
同样在KStream类中,有两种方法leftJoin()和outerJoin().这两种方法有什么区别呢?
我读过KStream.leftJoin,但没有找到确切的区别.
Mat*_*Sax 27
一个KTableshardes数据所有正在运行的卡夫卡流实例之间,而GlobalKTable对每个实例的所有数据的完整副本.缺点GlobalKTable是它显然需要更多的内存.优点是,您可以使用流中的非键属性执行KStream-GlobalKTable连接.对于KStream-KTable连接和连接的非键流属性,只能通过提取join属性并在进行连接之前将其设置为键 - 这将导致在连接之前对流进行重新分区步骤被计算.
但请注意,还存在语义差异:对于流表连接,Kafka Stream根据记录时间戳排列记录处理顺序.因此,对表的更新与您的流的记录一致.因为GlobalKTable,没有时间同步,因此更新GlobalKTable并完全与流记录的处理分离(因此,您获得较弱的语义).
有关更多详细信息,请参阅KIP-99:向Kafka Streams添加全局表.
关于左连接和外连接:它在数据库中分别是左外连接和全外连接.
对于左外连接,如果左侧的连接不匹配,您可能会"丢失"右输入流的数据.
对于(完整)外部联接,不会丢弃任何数据,并且两个流的每个输入记录都将在结果流中.