如何从一个地方的多个主题获取数据进行处理?

时间:2019-06-14 10:56:09

标签: scala apache-kafka spark-streaming

我有一个要求,我必须从3个kafka主题获取消息作为流数据,然后根据这3个主题数据之间的Join生成结果。请建议我使用Direct Stream for Scala的好方法。 谢谢

1 个答案:

答案 0 :(得分:1)

如果不同主题中的数据相同,并且在使用数据时您具有相同的处理逻辑,则可以从同一流中的不同主题进行消费并进行汇总。如果不同主题的处理逻辑不同,则将并发线程指定为4,然后在4个流之间进行聚合。您可以查看spark structured streaming文档以了解来自多个主题的使用情况。

val df = spark
  .readStream
  .format("kafka")
  .option("kafka.bootstrap.servers", "host1:port1,host2:port2")
  .option("subscribe", "topic1,topic2")
  .load()
df.selectExpr("CAST(key AS STRING)", "CAST(value AS STRING)")
  .as[(String, String)]

<--- your aggregation logic here --->