是否可以将数据从Nifi直接发送到Spark结构化流媒体/暴风雨而不会丢失数据?

时间:2019-02-14 11:10:22

标签: apache-spark apache-storm apache-nifi spark-structured-streaming

在我目前的情况下; Nifi收集数据,然后发送到Kafka。然后,任何流引擎都会使用来自kafka的数据并进行分析。在这个情况下; 我不想在Nifi和流媒体引擎之间使用Kafka 。因此,我想将数据从Nifi直接发送到流引擎。但是,我在这里不知道一些细节。

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

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

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

Spark结构化流媒体有可能吗?

2 个答案:

答案 0 :(得分:2)

所有与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->流式传输是一种更为标准且行之有效的方法。

答案 1 :(得分:1)

NifiReceiver的火花。

将此实现与apache-spark documentatation进行比较是可以容错的,因为它应该重放未传递的数据。