Apache NiFi 和 StreamSets 之间的区别

Difference between Apache NiFi and StreamSets

我正计划做一个 class 项目,并且正在研究一些我可以自动化或设置系统之间数据流的技术,发现其中有几个,即 Apache NiFi 和 StreamSets(到我的知识 )。我无法理解的是它们与可以使用它们的用例之间的区别?我对此很陌生,如果有人能向我解释一下,我将不胜感激。谢谢

它们在数据摄取场景中非常相似。 Apache NIFI(HDP) 更成熟,StreamSets 更轻量级。 两者都易于使用,都具有强大的功能。 StreamSets 可以很容易地 他们背后有公司,Hortonworks 和 Cloudera。

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

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

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

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

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

NiFi 可以运行 独立,也可以作为一个集群使用它自己的 built-in 集群系统。

StreamSets 数据收集器 (SDC) 然而,采用基于记录的方法。这意味着当数据进入您的管道时(无论是 JSON、CSV 等),它被解析为一种通用格式,这样理解数据格式的责任就不再落在每个单独的处理器和任何处理器可以连接到任何其他处理器。

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

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

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

完全披露:我是一名从事 StreamSets 工作的工程师。

苏拉杰,

好问题。

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

我从2006年开始就参与了NiFi项目,我对Streamsets的了解比较有限,就让他们说吧。

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

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

为使其有效而做出的一些关键功能和设计选择是什么:

1) 交互式命令和控制

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

2) 数据来源

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

3) 专门构建的数据存储库

NiFi 开箱即用的体验即使在非常普通的硬件或虚拟环境中也能提供非常强大的性能。这是因为流文件和内容存储库设计为我们提供了高性能但我们想要的事务语义,因为数据在流中起作用。流文件存储库是一个简单的预写日志实现,内容存储库提供了一个不可变的版本化内容存储。这反过来意味着我们可以 'copy' 通过只添加一个新指针(而不是实际复制字节)的数据,或者我们可以通过简单地从原始数据读取并写出一个新版本来转换数据。再次非常有效。再加上我刚才提到的出处,它提供了一个非常强大的平台。这里要理解的另一个真正关键的事情是,在连接系统的业务中,您并不总是能够决定所涉及的数据大小之类的事情。 NiFi API 是为了尊重这一事实而构建的,因此我们的 API 允许处理器执行接收、转换和发送数据等操作,而无需将完整对象加载到内存中。这些存储库还意味着在大多数流程中,大多数处理器甚至根本不接触内容。但是,您可以从 NiFi UI 中轻松准确地看到实际读取或写入的字节数,因此您再次获得对建立和观察流非常有用的信息。这种设计也意味着 NiFi 可以自然地支持背压和压力释放,这些对于数据流管理系统来说是非常关键的特性。

Streamsets公司的人之前提到NiFi是面向文件的。我不太确定文件、记录、元组、对象或通用术语之间的区别是什么,但现实是当数据在流中时,它是 'a thing that needs to be managed and delivered'。这就是 NiFi 所做的。无论您有很多非常高速的小东西还是大东西,无论它们来自 Internet 上的实时音频流还是来自硬盘驱动器上的文件,都没有关系。一旦进入流程,就该管理和交付它了。这就是 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

祝 class 项目顺利!如果您有任何问题,users@nifi.apache.org 邮件列表很乐意提供帮助。

谢谢 乔

两个恕我直言之间的两个主要区别是。

  1. Apache NiFi 是一个顶级 Apache 项目,这意味着它已经经历了这里描述的孵化过程,http://incubator.apache.org/policy/process.html, and can accept contributions from developers around the world who follow the standard Apache process which ensures software quality. StreamSets, is Apache LICENSED, meaning anyone can reuse the code, etc. But the project is not managed as an Apache project. In fact, in order to even contribute to Streamsets, you are REQUIRED to sign a contract. https://streamsets.com/contributing/ . Contrast this with the Apache NiFi contributor guide, which wasn't written by a lawyer. https://cwiki.apache.org/confluence/display/NIFI/Contributor+Guide#ContributorGuide-HowtocontributetoApacheNiFi

  2. StreamSets "runs atop Spark on YARN/Mesos instead, leveraging existing cluster resources you may have." 如果您想将数据流进一步部署到生成数据的设备所在的边缘,它会施加一些限制。 Apache MiniFi,NiFi 的一个子项目可以 运行 在单个 Raspberry Pi 上,而我相当有信心 StreamSets 不能,因为 YARN 或 Mesos 需要比 Raspberry Pi 提供的更多的资源。

披露:我是 Hortonworks 员工