我有一个卡夫卡流应用程序,它接收来自主题-1作为KStream和主题-2作为KTable的数据。这两个主题都有4个分区。假设我有4个应用程序实例正在运行,那么每个实例将从主题-1的单个分区接收数据。主题-2作为KTable接收如何?在这种情况下,所有实例都将从所有4个分区接收数据吗?如果这两个主题都是相同的,那么我猜Kafka流将确保为应用程序分配相同的分区。如果Top-2没有任何键,而是应用程序将从值本身推断出这一点,那么这意味着所有实例都需要从Top-2获取所有分区。卡夫卡流是如何处理这种情况的?
谢谢!
发布于 2018-05-05 17:03:09
根据输入分区对KTables进行切分。因此,与KStream类似,每个实例都将得到一个主题分区,并将这个主题分区具体化为KTable的碎片。Kafka流确保不同主题的主题分区位于同一位置,即一个实例将得到分配的topic-1 partition-0和topic-2 partition-0 (等等)。
如果topic-2没有密钥集,数据将随机分布在主题中。对于这种情况,您可以使用GlobalKTable代替。GlobalKTable是每个实例的所有分区的完整复制。如果您做了一个KStream-GlobalKTable- join,您可以指定一个"mapper“,它从表中提取join属性(也就是说,您可以从值中提取join属性)。
注意: KStream-GlobalKTable连接的语义与KStream-KTable联接不同。与后者相比,它不是时间同步的,因此,从GlobalKTable更新的设计来看,连接是不确定的;也就是说,不能保证KStream记录将首先“查看”GlobalKTable更新,从而加入更新的GlobalKTable记录。
https://stackoverflow.com/questions/50070749
复制相似问题