考虑到两个主题的数据在一个点上连接起来,最后发送到kafka sink,这是读取多个主题的最佳方式
val df = spark
.readStream
.format("kafka")
.option("kafka.bootstrap.servers", servers)
.option("subscribe", "t1,t2")
与
val df1 = spark
.readStream
.format("kafka")
.option("kafka.bootstrap.servers", servers)
.option("subscribe", "t1")
val df2 = spark
.readStream
.format("kafka")
.option("kafka.bootstrap.servers", servers)
.option("subscribe", "t2")
我会去的地方 df1.join(df2)
把它送到Kafka的Flume里。
在性能和资源使用方面,哪一个是更好的选择?
提前谢谢
ps:我看到另一个类似的问题spark structured streaming app从多个kafka主题中阅读,但是两个主题的Dataframe似乎没有一起使用
1条答案
按热度按时间y3bcpkx11#
在第一种方法中,您必须在某个点添加一个过滤器,然后继续join。除非您还希望同时处理这两个流,否则第二种方法的性能更好,更易于维护。
我想说的是,方法2是一个简单的方法,跳过了过滤阶段,因此效率更高一些。它还提供了自主权,在这两个流从下面的Angular 来看,例如:一个主题是转移到一个新的Kafka集群。您也不必考虑两个主题之间的不均匀性,例如:分区数。这使作业调整更容易。