apache-kafka - Spark Streaming 与 Nifi

标签 apache-kafka spark-streaming apache-nifi

我正在寻找可以在 Nifi 中使用 Spark 流的方法。我看到一些帖子将 SiteToSite tcp 连接用于 Spark 流应用程序,但我认为如果我可以从 Nifi 自定义处理器启动 Spark 流会很好。

PublishKafka 将消息发布到 Kafka,然后 Nifi Spark 流处理器将从 Kafka 主题读取。

我可以使用 Spark Streaming 启动器 API 从自定义 Nifi 处理器启动 Spark 流应用程序,但最大的挑战是它将为每个流文件创建 Spark 流上下文,这可能是一项代价高昂的操作。

有人建议在 Controller 服务中存储 Spark 流上下文吗?或使用 Nifi 运行 Spark Streaming 应用程序的任何更好的方法?

最佳答案

您可以使用 ExecuteSparkInteractive 编写您尝试包含在您的 Spark 流应用程序中的 Spark 代码。

这里你需要一些设置来让 Spark 代码在 Nifi 中运行 -

  1. 设置 Livy 服务器
  2. 添加 Nifi Controller 以启动 spark Livy session 。

    LivySessionController

    StandardSSLContextService(可能需要)

在 Nifi 中启用 LivySessionController 后,它将启动 spark session ,如果这些 livy session 已启动并正在运行,您可以检查 spark UI。

现在我们有 Livy spark session 在运行,所以每当流文件通过 Nifi 流时,它都会在 ExecuteSparkInteractive 中运行 spark 代码

这类似于在 Nifi 外部运行的 Spark 流应用程序。对我来说,与使用单独的 Spark 流应用程序相比,这种方法工作得很好并且易于维护。

希望这会有所帮助!!

关于apache-kafka - Spark Streaming 与 Nifi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44350301/

相关文章:

apache-nifi - 清除处理器公告的方法

apache-nifi - Apache NiFi无法连接到 "localhost:8080/nifi"

elasticsearch - Kafka vs Filebeat将Shippong日志转换为Logstash

java - Avro 序列化异常 - java.time.Instant 无法转换为 java.lang.Long

java - 来自多个主题 Kafka 的消息顺序

apache-spark - 驱动程序停止后,Spark流作业失败

apache-spark - java.lang.AbstractMethodError,org.apache.spark.internal.Logging$class.initializeLogIfNecessary

java - kafka jar 不包含 kafka.utils.testutils

apache-spark - 混合 Spark Structured Streaming API 和 DStream 写入 Kafka

amazon-redshift - 使用 Apache Nifi 将数据从 vertica 传输到 Redshift