前面几篇文章分别介绍了 NiFi 和 StreamSets Data Collector (以下简称 SDC) 在一些场景下的使用配置,本文从几个维度简单对比这两个开源的DFM (Data Flow Management) 产品
数据流的定义
作为一款数据流处理平台,灵活的定义和管理数据流是最基本的能力
NiFi 的核心是对 Flowfile 生命周期的管理,核心组件 Processor、Flowfile Repo、FlowContent Repo、Data provenance 都是为其提供服务
在 NiFi 中,Processor 会对 Flowfile 进行 route、copy、modify、terminate 等操作,来完成对流式数据的管理,对不同状态的 Flowfile 都可以分出不同的数据流去处理
而 SDC 没有 NiFi 那么灵活,首先 SDC 中限定了 Processor 的类型
SDC 中只有以下几种类型的 Processor
- Origin:数据源,用来生产数据
- Processor:数据转换
- Destination:消费数据
- Executor:处理特定事件、如发邮件
SDC 规范了 Processor 的类型,所以不如 NiFi 那么灵活,比如 一个 Pipeline 中只能定义一个数据源
其次,SDC 中只能对处理出错的数据流做处理,并且无法细分错误,而 NiFi 中可以把不同状态的数据流路由到其他 Processor 去做进一步处理,比如 DebugFlow、或者错误日志、Elasticsearch 等
另外,在 NiFi 中可以随时关闭上下游的数据流来更改配置,灵活调试,而 SDC 中只能将整个 Pipeline 停止后才能更改配置,并且 NiFi 可以配置 Processor 连接的队列进行限流,以防上层流量爆发式增长造成后端系统发生故障
NiFi 可以通过 Data provenance 追溯每一条流式数据的内容、状态
而 SDC 虽然可以通过图表来展示 Processor 的流量状态,但无法查看数据,调试起来很麻烦
NiFi 中可以全局定义 JDBC、SSL 证书、Schema,数据流,并可以复用这些配置,而 SDC 中无法这样做,对于单个 Processor 只能单独配置
综上所诉,我认为 NiFi 在数据流的定义和管理上比 SDC 灵活很多
用户和权限管理
用户认证方面,NiFi 和 SDC 都支持外部认证,但是 SDC 只支持 LDAP,而 NiFi 不仅支持 LDAP 还支持 Kerberos、OpenID、Knox 等
而权限管理方面,SDC 是 RBAC(基于角色的访问控制),最小权限单位为 Pipeline,赋予角色对 Pipeline 的权限,角色可以赋予组和用户,从而实现细分用户对 Pipeline 的访问控制
NiFi 的权限控制就灵活了很多,最小可以赋予用户和组对单个 Processor 的管理
综上所诉,我认为 NiFi 在用户和权限管理上比 SDC 灵活很多
数据流监控和告警
监控能够及时地发现数据流的瓶颈和问题所在,NiFi 中只能够查看 Flowfile 的状态和内容,报警的话可以单独将错误事件流发送到特定的 Processor 做处理,而 SDC 中能够查看进出数据流的图表,并针对 Processor 设定规则并发送告警邮件
监控和告警方面,NiFi 和 SDC 各有优劣,数据流的汇总报表上,SDC 更胜一筹,而在告警方面,我认为 NiFi 更加灵活
集群部署
NiFi 支持集群部署,可横向扩展集群的数据处理能力, 同时在多个节点上运行 Processor,而 SDC 不支持集群部署,支持集群模式运行,所谓集群模式就是指使用批处理模式运行特定的 Processor,就是把特定作业提交给 Yarn、Mesos 集群,具体可以看官方文档的介绍 Cluster Pipeline Overview
在集群部署方面,NiFi 横向扩展能力很强,但是 SDC 虽然不支持集群部署,但是也可以通过商用版本的 Hub 提供多节点处理数据的能力
其他
通过以上几个方面的对比,显然 NiFi 比 SDC 更胜一筹
但 SDC 只是 StreamSets 的一个产品,通过 SDC Edge、SCH 等产品,可以构建出一个边缘计算处理平台,只靠 NiFi 是无法做到的
而在与大数据管理平台的集成上, NiFi 与 HDP 的集成较好,而 SDC 与 CDH 的结合紧密
毕竟本篇文章只是对比 NiFi 和 SDC 同为一个 DFM(DataFlow Management) 的优劣,所以 NiFi 比 SDC 更加优秀
参考资料
- Apache Nifi vs StreamSets简单比较 https://blog.csdn.net/ffjl1985/article/details/81391333
- https://ask.streamsets.com/question/1683/how-we-can-setup-sdc-multi-node-cluster/
- https://streamsets.com/documentation/datacollector/3.4.0/help/datacollector/UserGuide/Cluster_Mode/ClusterPipelines.html#concept_hmh_kfn_1s