我计划做一个课程项目,正在研究一些技术,以便我可以自动化或设置系统之间的数据流。 我发现有两个平台:Apache NiFi和StreamSets(据我所知)。 我不明白它们之间的区别以及它们可以使用的用例是什么? 我是新手,如果有人能向我解释一下,将不胜感激。谢谢
我计划做一个课程项目,正在研究一些技术,以便我可以自动化或设置系统之间的数据流。 我发现有两个平台:Apache NiFi和StreamSets(据我所知)。 我不明白它们之间的区别以及它们可以使用的用例是什么? 我是新手,如果有人能向我解释一下,将不胜感激。谢谢
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具有非常独特的功能,可以生成细粒度和强大的可追踪性详细信息,包括数据源、数据处理过程、目的地以及处理时间。这对于有效的数据流管理至关重要,尤其是在早期探索阶段的项目中,最重要的是它提供了出色的调试灵活性。您可以设置流程并让其运行,然后使用溯源来证明确实如您所愿地进行了操作。如果某些事情没有按预期发生,您可以修复流程并重新播放对象,然后重复尝试。这真的很有帮助。祝你在课程项目中好运!如果您有任何问题,用户@nifi.apache.org邮件列表将很乐意提供帮助。
谢谢 乔
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工作的工程师。
它们在数据摄取方面非常相似。 Apache NIFI(HDP)更为成熟,StreamSets则更加轻量级。 两者易于使用,都具有强大的功能。而StreamSets可以轻松地进行扩展。 它们都有公司支持,分别是Hortonworks和Cloudera。
显然,NIFI比StreamSets拥有更多的贡献者,在生产环境中也有更多的企业部署。
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。
StreamSets“在 YARN/Mesos 上运行 Spark,利用您可能拥有的现有集群资源。”这会对您想要将数据流向边缘设备(即生成数据的设备)的部署造成一定限制。而 Apache MiniFi 是 NiFi 的一个子项目,可以在单个 Raspberry Pi 上运行,而我相当确信 StreamSets 不能够,因为 YARN 或 Mesos 需要比 Raspberry Pi 提供更多的资源。