在我目前的情况下; Nifi收集数据,然后发送给Kafka。然后任何流媒体引擎都会消耗来自kafka的数据并对其进行分析。在这种情况下;我不想在Nifi和Streaming Engine之间使用Kafka。所以,我想直接从Nifi向流媒体发送数据。但是,我不知道这里的一些细节。
例如Spark Structured Streaming;假设我直接从Nifi发送数据到Spark Structured Streaming,Spark收到了这个数据,但是后来spark的节点关闭了。 Spark节点中的数据会发生什么变化? (Spark结构流是否有任何Nifi接收器?),此外,在这种情况下,Spark Structured Streaming的数据保证是什么?
例如Storm;风暴有Nifi Bolt。但是,假设Storm收到了来自Nifi的数据,但随后节点出现故障。数据会发生什么变化?另外,在这种情况下,Storm的数据保证是什么?
很快,我想直接将数据从Nifi发送到SparkStructuredStreaming / Storm(我更可能使用Spark。)。但是如果流媒体集群中的任何节点出现故障,我不想丢失数据。
Spark 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是一种更标准和经过验证的方法。
火花有一个NifiReceiver。
比较实现与apache-spark documentatation这个接收器是容错的,因为它应该重放未传递的数据。