Apache NiFi和StreamSets的区别

43

我计划做一个课程项目,正在研究一些技术,以便我可以自动化或设置系统之间的数据流。 我发现有两个平台:Apache NiFi和StreamSets(据我所知)。 我不明白它们之间的区别以及它们可以使用的用例是什么? 我是新手,如果有人能向我解释一下,将不胜感激。谢谢

4个回答

68

Suraj,

好问题。

我的回答来自于Apache NiFi开源项目管理委员会成员的角度以及我对数据流管理领域的热情。

我从2006年NiFi项目开始就一直参与其中。我对Streamsets的了解相对有限,所以我会让他们自己阐述。

关键是要理解NiFi的构建目标是要做一件非常重要的事情并且做得非常好,那就是“数据流管理”。它的设计基于一种称为流程编程的概念,你可能希望阅读和引用你的项目相关文档 'https://en.wikipedia.org/wiki/Flow-based_programming'。

已经有许多系统可以产生数据,如传感器等。已经有许多系统专注于数据处理,如Apache Storm、Spark、Flink等。最后,已经有许多系统存储数据,如HDFS、关系数据库等。NiFi纯粹专注于连接这些系统,并提供用户体验和必要的核心功能来实现这一点。

其中一些关键功能和设计选择使其有效:

1)交互式命令和控制

连接系统的人的工作是能够快速高效地与他们看到的不断流动的数据进行交互。NiFi的用户界面允许您做到这一点,因为数据正在流动时,您可以添加功能来操作它,复制数据以尝试新方法,调整当前设置,查看最近的和历史统计信息,有用的行内文档等等。与之相比,几乎所有其他系统都采用设计和部署导向的模型,这意味着您需要进行一系列更改,然后将其部署。这种模型很好,可以直观理解,但对于数据流管理工作来说,意味着您无法获得交互式逐步反馈,而这对于快速构建新的流程或安全高效地纠正或改进现有数据流处理至关重要。

2)数据可溯源性

NiFi具有非常独特的功能,可以生成细粒度和强大的可追踪性详细信息,包括数据源、数据处理过程、目的地以及处理时间。这对于有效的数据流管理至关重要,尤其是在早期探索阶段的项目中,最重要的是它提供了出色的调试灵活性。您可以设置流程并让其运行,然后使用溯源来证明确实如您所愿地进行了操作。如果某些事情没有按预期发生,您可以修复流程并重新播放对象,然后重复尝试。这真的很有帮助。
3) 面向专用数据库
NiFi的开箱即用体验即使在非常简陋的硬件或虚拟环境下也提供了非常强大的性能。这是因为flowfile和content repository设计为数据通过流程时提供高性能但具有事务语义。flowfile repository是一个简单的write-ahead日志实现,而content repository提供不可变版本的内容存储库。这意味着我们只需添加新指针(而不是实际复制字节)即可“复制”数据,或者通过从原始数据读取并写出新版本来转换数据。再次非常高效。再加上我之前提到的溯源功能,这就提供了一个非常强大的平台。在这里还有一个非常重要的事情需要了解,就是在连接系统的业务中,您并不总能控制所涉及数据的大小。NiFi API是为了遵守这一事实而构建的,因此我们的API允许处理程序执行接收、转换和发送数据,而无需将完整对象加载到内存中。这些存储库还意味着在大多数流程中,大多数处理器根本不会触摸内容。但是,您可以轻松地从NiFi UI上看到实际读取或写入的字节数,因此您可以在建立和观察流程时获得非常有用的信息。这种设计也意味着NiFi可以自然地支持反向压力和释放压力,这些都是数据流管理系统的非常关键的功能。先前 Streamsets 公司提到过,NiFi 是面向文件的。我不太确定在一般术语中,文件、记录、元组、对象或消息之间有什么区别,但现实情况是当数据处于流中时,它就是“需要管理和传递的东西”。这就是 NiFi 所做的。无论您有很多非常高速的小东西,还是有大型东西,并且无论它们来自互联网上的实时音频流还是来自硬盘上的文件,都没有关系。一旦它进入流中,就是管理和传递它的时候了。这就是 NiFi 所做的。
Streamsets 公司也提到过,NiFi 是无模式的。确实,NiFi 不强制将数据从其原始格式转换为某种特殊的 NiFi 格式,我们也不必重新将其转换回某个格式以进行后续传递。如果我们这样做,那将是相当不幸的,因为这意味着即使是最微不足道的情况也会产生问题性能影响,但幸运的是 NiFi 没有这个问题。此外,如果我们走这条路线,那意味着处理多样化的数据集(如媒体:图像、视频、音频等)将是困难的,但我们走在了正确的道路上,NiFi 经常用于处理这些事情。
最后,如果您在继续项目时发现有需要改进的地方,或者您想贡献代码,我们非常乐意为您提供帮助。您可以从 https://nifi.apache.org 很快找到有关如何提交问题、提交补丁、发送电子邮件列表等信息。
以下是一些有趣的最近 NiFi 项目,可供查看:   https://www.linkedin.com/pulse/nifi-ocr-using-apache-read-childrens-books-jeremy-dyer   https://twitter.com/KayLerch/status/721455415456882689

祝你在课程项目中好运!如果您有任何问题,用户@nifi.apache.org邮件列表将很乐意提供帮助。

谢谢 乔


1
更新:Nifi 1.3具有更多的功能,其中包括具有模式注册表的“记录”概念,“记录”概念基本上是一种格式表示,具有像AvroReader、CSVReader、JSONReader这样的插件,可以无缝地从一个格式转换到另一个格式。Nifi 1.6还具有更多功能,无需将数千个文件拆分为单个文件。只需使用二进制的多文件块即可加快速度。 - Dexter

32

Apache NiFi和StreamSets Data Collector都是Apache许可证下的开源工具。

Hortonworks有一个商业支持的变体称为Hortonworks DataFlow (HDF)。

虽然两者都有很多相似之处,例如基于Web界面,都用于摄取数据,但也存在一些关键差异。它们都由处理器链接在一起执行转换、序列化等操作。

NiFi处理器基于文件且无模式。这意味着一个数据片段由FlowFile代表(可以是磁盘上的实际文件,或从其他地方获取的某些数据块)。每个处理器负责理解数据内容以便对其进行操作。因此,如果一个处理器了解A格式,而另一个处理器只了解B格式,则需要在这两个处理器之间执行数据格式转换。

NiFi可以作为单机运行,也可以使用其内置的集群系统作为集群运行。

而StreamSets Data Collector (SDC)则采用记录为基础的方法。这意味着当数据进入管道时,它会被解析为通用格式,这样不再将理解数据格式的责任放在每个单独的处理器上,并且任何处理器都可以连接到任何其他处理器。

SDC也可以独立运行,也可以以集群模式运行,但它在YARN/Mesos上运行于Spark之上,利用您可能拥有的现有集群资源。

NiFi已经存在大约10年(但在开源社区中不到2年)。

StreamSets于2015年稍晚发布给开源社区。它是与供应商无关的,就Hadoop而言,Hortonworks、Cloudera和MapR都受支持。

完整披露:我是一名在StreamSets工作的工程师。


那个描述得很好。非常感谢。 - Goutam
在 OpenHUB 上比较 StreamSets 和 NiFi 是非常有启发性的 - 很多统计数据都比你想象的要接近: StreamSets vs NiFi - metadaddy
声明:我也是StreamSets的员工。 - metadaddy
更新:Nifi 1.3具有更多的功能,其中包括具有模式注册表的“记录”概念,“记录”概念基本上是一种格式表示,具有像AvroReader、CSVReader、JSONReader这样的插件,可以无缝地从一个格式转换到另一个格式。Nifi 1.6还具有更多功能,无需将数千个文件拆分为单个文件。只需使用二进制的多文件块即可加快速度。 - Dexter
自2021年4月27日发布3.22版本后,Streamsets SDC/datacollector-oss似乎没有进一步的开源发布或提交。此外,在4.x版本之后也没有开源版本了。这意味着datacollector-oss很可能已经不再是开源的,现在已经变成了专有软件。 - ebeb

4

它们在数据摄取方面非常相似。 Apache NIFI(HDP)更为成熟,StreamSets则更加轻量级。 两者易于使用,都具有强大的功能。而StreamSets可以轻松地进行扩展。 它们都有公司支持,分别是Hortonworks和Cloudera。

显然,NIFI比StreamSets拥有更多的贡献者,在生产环境中也有更多的企业部署。


2
David,我很好奇你是如何定义“轻量级”的?例如,我已经在Raspberry PI上运行NiFi好几个月了。你使用了哪些标准呢?谢谢! - andrew
1
例如,看一下Docker大小图像:Nifi> 1Gb / Stramset <500Mb。这可以被视为更轻量级的。 - gcharbon
@gcharbon 嗯,SDC 允许您事后添加插件。Nifi 已经几乎内置了所有内容。因此,在这里,“轻量级”和“内置电池”是权衡。 - OneCricketeer

3
我认为两者的主要不同之处有以下两点:
  1. Apache NiFi 是顶级 Apache 项目之一,意味着它已经通过了孵化过程,详见这里http://incubator.apache.org/policy/process.html,并且可以接受来自全球开发者的贡献,这些贡献者都遵循保证软件质量的标准 Apache 流程。而 StreamSets 是基于 Apache 许可证的,这意味着任何人都可以重用代码等。但该项目并非作为 Apache 项目进行管理,实际上,如果你想为 Streamsets 做出贡献,必须签署合同,详见https://streamsets.com/contributing/。与此形成对比的是,Apache NiFi 的贡献者指南并非由律师编写,详见https://cwiki.apache.org/confluence/display/NIFI/Contributor+Guide#ContributorGuide-HowtocontributetoApacheNiFi

  2. StreamSets“在 YARN/Mesos 上运行 Spark,利用您可能拥有的现有集群资源。”这会对您想要将数据流向边缘设备(即生成数据的设备)的部署造成一定限制。而 Apache MiniFi 是 NiFi 的一个子项目,可以在单个 Raspberry Pi 上运行,而我相当确信 StreamSets 不能够,因为 YARN 或 Mesos 需要比 Raspberry Pi 提供更多的资源。

声明:我是 Hortonworks 的员工。

3
现在有一款名为“数据收集器边缘”的产品,可以在嵌入式设备上运行。(声明:StreamSets员工) - Jeff Evans
1
实际上,即使是 StreamSets Data Collector 的完整版本也可以在树莓派上运行,因为最简单的搜索都可以告诉你 https://streamsets.com/blog/ingesting-sensor-data-raspberry-pi-streamsets-data-collector/ - metadaddy
很遗憾,即使在2019/20年,SDC UI仍然无法在Windows上运行 :( - Samant

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接