如何对多个 Spark 作业并行执行多个 Kafka 主题

Posted

技术标签:

【中文标题】如何对多个 Spark 作业并行执行多个 Kafka 主题【英文标题】:How to do multiple Kafka topics to multiple Spark jobs in parallel 【发布时间】:2017-01-12 14:09:00 【问题描述】:

如果这个问题没有意义,请原谅,因为我刚刚开始使用 Spark 并试图理解它。

根据我的阅读,Spark 是对流数据进行实时分析的一个很好的用例,然后可以将其推送到下游接收器,例如 hdfs/hive/hbase 等。

我对此有 2 个问题。我不清楚在任何给定时间是否只有 1 个 spark 流作业正在运行或多个。假设我需要对来自 Kafka 的每个主题或流入 Kafka 的每个源执行不同的分析,然后将这些结果推送到下游。

Spark 是否允许您并行运行多个流作业,以便您可以为每个流(或者在本例中为每个 Kafka 主题)保持单独的聚合分析。如果是这样,那是如何完成的,您可以指出我的任何文档吗?

为了清楚起见,我的用例是从不同来源进行流式传输,每个来源可能有我需要执行的不同分析以及不同的数据结构。我希望能够拥有多个 Kafka 主题和分区。我了解每个 Kafka 分区都映射到一个 Spark 分区,并且可以并行化。

我不确定您如何并行运行多个 Spark 流作业,以便能够从多个 Kafka 主题中读取数据,并对这些主题/流进行单独的分析。

如果不是 Spark,这在 Flink 中可以做到吗?

其次,如何开始使用 Spark,似乎每个组件都有一个公司或发行版可供选择,Confluent-Kafka、Databricks-Spark、Hadoop-HW/CDH/MAPR。是否真的需要所有这些,或者在限制供应商数量的同时使用大数据管道的最小和最简单的方法是什么?开始 POC 似乎是一项艰巨的任务。

【问题讨论】:

【参考方案1】:

您已经提出了多个问题,因此我将分别解决每个问题。

    Spark 是否允许您并行运行多个流作业?

是的

    是否有任何关于使用 Kafka 进行 Spark Streaming 的文档?

https://spark.apache.org/docs/latest/streaming-kafka-integration.html

    如何开始?

一个。书:https://www.amazon.com/Learning-Spark-Lightning-Fast-Data-Analysis/dp/1449358624/

b.运行/学习 Spark 的简单方法:https://community.cloud.databricks.com

【讨论】:

感谢您的建议。我仍然不清楚您如何在 Spark 中从 Kafka 中读取多个独立主题,并在这些独立流上维护聚合级别的数据。您提供的文档我已经阅读过,但仅显示了如何配置 Spark 以从单个主题中读取。我想拥有多个工作并在每个工作中阅读一个单独的主题,并分别维护每个流上的数字。有什么想法吗 ?如果有帮助的话,也许我可以改写我最初的问题。谢谢.. 如果我正确理解了您的目标,那么您需要两个单独的 Spark 应用程序,每个应用程序都从单独的 Kafka 流中读取。这是准确的吗?如果是这样,那么解决方案是编写两个独立的 Spark 应用程序。 是的,就是这样,所以如果我们不希望它们共享任何数据,是否有可能拥有 2 个完全独立的 Spark 应用程序?这正是我想要的。我找不到如何做到这一点的例子。顺便说一句,如果一个人愿意,是否可以在 2 个独立的工作之间共享数据? 是的,您可以在集群上运行两个完全独立的 Spark 应用程序。您可以拥有硬件支持的尽可能多的应用程序。是的,您可以在应用程序之间共享数据。通常,您会从一个应用程序写入磁盘并从另一个应用程序读取。 顺便说一句,对于任何对这个问题投反对票的人,我很想知道为什么,显然你无法像 Akbar 那样回答这个问题,所以你不应该投反对票对自己一无所知。【参考方案2】:

我同意Akbar 和John 的观点,即我们可以并行运行从不同来源读取的多个流。 我喜欢补充一点,如果你想在流之间共享数据,你可以使用 Spark SQL API。因此,您可以将您的 RDD 注册为 SQL 表并在所有流中访问同一个表。这是可能的,因为所有流共享相同的 SparkContext

【讨论】:

以上是关于如何对多个 Spark 作业并行执行多个 Kafka 主题的主要内容,如果未能解决你的问题,请参考以下文章

谈Spark下并行执行多个Job的问题

谈Spark下并行执行多个Job的问题

Spark:并行处理多个kafka主题

如何在单个 Spark 作业中调用多个 writeStream 操作?

Spark---并行度和分区

Spark 将任务分发给多个执行器