Apache NiFi和StreamSets之间的区别

时间:2016-04-27 19:51:36

标签: apache-nifi streamsets

我打算做一个类项目,并且经历了一些技术,我可以自动化或设置系统之间的数据流,并发现其中有几个,即Apache NiFi和StreamSets(据我所知)。我无法理解的是它们与可以使用它们的用例之间的区别?我是新手,如果有人能解释我,我会非常感激。谢谢

4 个答案:

答案 0 :(得分:56)

苏拉杰,

很棒的问题。

我的回复是作为开源Apache NiFi项目管理委员会的成员,以及对数据流管理领域充满热情的人。

自2006年启动以来,我一直参与NiFi项目。我对Streamsets的了解相对有限,所以我会让他们说出来。

要理解的关键是NiFi是为了做一件非常重要的事情而构建的,那就是数据流管理'。它的设计基于一个名为“基于流程的编程”的概念,您可能希望阅读并参考您的项目' https://en.wikipedia.org/wiki/Flow-based_programming'

已经有许多系统可以生成传感器等数据。有许多系统专注于Apache Storm,Spark,Flink等数据处理。最后,有许多系统存储HDFS,关系数据库等数据。 NiFi完全专注于连接这些系统的任务,并提供必要的用户体验和核心功能。

为实现这一目标,有哪些关键功能和设计选择:

1)交互式命令和控制

尝试连接系统的人的工作是能够快速有效地与他们看到的恒定数据流进行交互。 NiFi的UI允许您在数据流动时执行此操作,您可以添加要对其进行操作的功能,分发数据副本以尝试新方法,调整当前设置,查看最新和历史统计数据,有用的在线文档和更多。相比之下,几乎所有其他系统都具有面向设计和部署的模型,这意味着您进行一系列更改然后进行部署。该模型很好并且可以直观,但对于数据流管理工作,这意味着您不会通过变更反馈获得交互式更改,这对于快速构建新流或安全有效地纠正或改进现有数据的处理至关重要流。

2)数据来源

NiFi的一个非常独特的功能是能够生成细粒度和强大的可追溯性细节,用于数据的来源,对其执行的操作,发送的位置以及流程中的完成时间。这对于有效的数据流管理至关重要,原因有很多,但是对于处于早期探索阶段和项目工作的人来说,最重要的是这给你带来了很棒的调试灵活性。您可以设置流程并让事情运行,然后使用来源实际证明它完全符合您的要求。如果某些事情没有按照您的预期发生,您可以修复流程并重播该对象然后重复。真有帮助。

3)专用数据存储库

NiFi的开箱即用体验即使在非常适中的硬件或虚拟环境中也能提供非常强大的性能。这是因为流文件和内容存储库设计为我们提供了高性能但我们想要的事务语义,因为数据在流程中工作。 flowfile存储库是一个简单的预写日志实现,内容存储库提供了一个不可变的版本化内容存储库。这反过来意味着我们可以复制'数据只需要添加一个新指针(实际上不是复制字节),或者我们可以通过简单地读取原始数据并写出新版本来转换数据。再次非常有效率。再加上我刚才提到的物源,它只是提供了一个非常强大的平台。另一个值得理解的关键是,在连接系统的业务中,您始终无法决定所涉及的数据大小。 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

祝好课程项目好运!如果您有任何问题,users@nifi.apache.org邮件列表可以提供帮助。

由于 乔

答案 1 :(得分:28)

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

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

虽然两者都有许多相似之处,例如基于网络的ui,但两者都用于摄取数据,但存在一些关键差异。它们还包括链接在一起的处理器,以执行转换,序列化等。

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

NiFi既可以独立运行,也可以使用自己的内置集群系统作为集群运行。

然而,

StreamSets Data Collector(SDC)采用基于记录的方法。这意味着当数据进入您的管道时(无论是JSON,CSV等),它被解析为通用格式,以便不再将理解数据格式的责任放在每个处理器上,并且可以连接任何处理器到任何其他处理器。

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

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

StreamSets在2015年稍后发布到开源社区。它与供应商无关,并且就Hadoop而言,Hortonworks,Cloudera和MapR都受到支持。

完全披露:我是一名在StreamSet上工作的工程师。

答案 2 :(得分:3)

它们与数据摄取方案非常相似。 Apache NIFI(HDP)更成熟,StreamSets更轻巧。 两者都易于使用,两者都具有很强的能力。 StreamSets很容易 他们有公司,Hortonworks和Cloudera。

显然,有更多的贡献者在使用NIFI而不是StreamSets,当然,NIFI在生产中有更多的企业部署。

答案 3 :(得分:3)

两个恕我直言的两个关键区别是。

  1. Apache NiFi是一个顶级的Apache项目,意味着它已经完成了这里描述的孵化过程http://incubator.apache.org/policy/process.html,并且可以接受来自世界各地的开发人员的贡献,他们遵循标准的Apache过程来确保软件质量。 StreamSets是Apache LICENSED,意味着任何人都可以重用代码等。但是项目不是作为Apache项目进行管理的。实际上,为了甚至为Streamset做出贡献,您需要签署合同。 https://streamsets.com/contributing/。与Apache NiFi贡献者指南形成对比,该指南不是由律师撰写的。 https://cwiki.apache.org/confluence/display/NIFI/Contributor+Guide#ContributorGuide-HowtocontributetoApacheNiFi

  2. StreamSets“代替YARN / Mesos在Spark上运行,利用您可能拥有的现有群集资源。”如果您希望将数据流进一步部署到生成数据的设备的边缘,则会产生一些限制。 Apache Mini的子项目Apache Mini可以在单个Raspberry Pi上运行,而我相信StreamSets不能,因为YARN或Mesos需要的资源比Raspberry Pi提供的更多。

  3. 披露:我是Hortonworks员工