Apache spark Spark结构化流式阅读,从多个卡夫卡主题中读取多个阅读流

Apache spark Spark结构化流式阅读,从多个卡夫卡主题中读取多个阅读流,apache-spark,apache-kafka,spark-structured-streaming,Apache Spark,Apache Kafka,Spark Structured Streaming,考虑到来自这两个主题的数据在一个点上连接,并最终发送到卡夫卡接收器,这是读取多个主题的最佳方式 val df = spark .readStream .format("kafka") .option("kafka.bootstrap.servers", servers) .option("subscribe", "t1,t2") vs 我将在某处df1.加入(df2)并将其发送到卡夫卡接收器 在性能和资源使用方面,这里哪一个是更好的选择 提前谢谢 PS:我看到了另一个类似的问题

考虑到来自这两个主题的数据在一个点上连接,并最终发送到卡夫卡接收器,这是读取多个主题的最佳方式

val df = spark
  .readStream
  .format("kafka")
  .option("kafka.bootstrap.servers", servers)
  .option("subscribe", "t1,t2")
vs

我将在某处
df1.加入(df2)
并将其发送到卡夫卡接收器

在性能和资源使用方面,这里哪一个是更好的选择

提前谢谢


PS:我看到了另一个类似的问题,但两个主题的数据帧似乎没有一起使用

在第一种方法中,您必须在某个点添加一个过滤器,然后继续join。除非您还希望同时处理这两个流,否则第二种方法的性能要高一些,并且更易于维护


我要说的是,方法2是一个简单的方法,跳过了过滤阶段,因此效率更高。从infra的角度来看,它还提供了两个流的自主权,例如:其中一个主题是转移到新的卡夫卡集群。您也不必考虑两个主题之间的不均匀性,例如:分区数。这使得作业调整更容易。

谢谢@D3V。我认为最后一点对我们来说是主要的加分,因为两个主题在流量方面有很大的不同。
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")