apache-spark - 是否可以直接将数据从 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 可行吗?
解决方案
与 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 是一种更标准且经过验证的方法。
推荐阅读
- javascript - 如何在对象的属性上添加属性?
- python - Keras 当我尝试训练我的模型时,我得到一个“
“ 错误 - python - 在 Whoosh 中一次搜索多个索引
- android - 为什么从我粘贴的内容中更新 IDE 需要这么长时间?
- azure-devops - 由于数据分类语句,Azure DevOps DACPAC 部署失败
- fortran - 将使用 Conda 安装的 FFTW 库链接到 gfortran?
- sql - 动态 SQL 查询
- bootstrap-vue - 与 BootstrapVue 中的属性相关联的动态指令修饰符
- c# - 从服务器加载 Json 时如何修复错误
- python-3.x - 如何在给定的时间内重复此代码