首页 > 解决方案 > 是否可以直接将数据从 Nifi 发送到 Spark Structured Streaming/Storm 而不会丢失数据?

问题描述

在我目前的情况下;Nifi 收集数据,然后发送到 Kafka。然后任何流引擎从 kafka 消费数据,并对其进行分析。在这个情况下; 我不想在 Nifi 和 Streaming Engine 之间使用 Kafka。所以,我想直接将数据从 Nifi 发送到流引擎。但是,我不知道这里的一些细节。

例如 Spark 结构化流;假设我直接将数据从 Nifi 发送到 Spark Structured Streaming,Spark 已收到此数据,但随后 spark 的节点已关闭。Spark 节点中的数据会发生什么变化?(Spark Structured Streaming 有 Nifi 接收器吗?),另外,在这种情况下,Spark Structured Streaming 的数据保证是什么?

例如风暴;Storm有Nifi Bolt。但是,假设 Storm 已经从 Nifi 接收到数据,但随后节点已关闭。数据会发生什么?另外,在这种情况下,Storm 上的数据保证是什么?

很快,我想直接将数据从 Nifi 发送到 SparkStructuredStreaming/Storm(我更可能使用 Spark。)。但是,如果流引擎集群中的任何节点出现故障,我不想丢失数据。

这对 Spark Structured Streaming 可行吗?

标签: apache-sparkapache-stormapache-nifispark-structured-streaming

解决方案


与 NiFi 的所有流式集成都是使用站点到站点协议完成的,该协议最初是为两个 NiFi 实例传输数据而设计的。

据我所知,目前有与 Storm、Spark 流和 Flink 的集成。我不熟悉 Spark 结构化流,但我想您可以构建与其他类似的集成。

https://github.com/apache/nifi/tree/master/nifi-external/nifi-spark-receiver

https://github.com/apache/nifi/tree/master/nifi-external/nifi-storm-spout

https://github.com/apache/flink/tree/master/flink-connectors/flink-connector-nifi

不过,NiFi 不是可重放的数据源。数据在交易中从 NiFi 传输到流系统,以确保在目的地确认交易之前不会将其从 NiFi 端删除。但是,如果在那次提交之后流式传输系统出现故障,那么数据不再在 NiFi 中,这是流式传输系统的问题。

我不确定您不想使用 Kafka 的原因,但 NiFi -> Kafka -> Streaming 是一种更标准且经过验证的方法。


推荐阅读