在构建大数据管道时,我们需要考虑处理数据的数量,类型和速度,这些数据通常出现在Hadoop生态系统的入口处。在决定使用哪种工具来满足我们的要求时,会考虑可扩展性,可靠性,适应性和开发时间等初始因素。在本文中,我们将介绍三种Apache处理工具:Flume,Kafka和NiFi。这三款产品均提供出色的性能,横向扩展和插件机制,可通过自定义组件扩展功能。
Apache Flume
Flume部署由一个或多个配置了拓扑的代理组成。 Flume Proxy是一个JVM进程,托管Flume拓扑的基本构建块,即源,通道和接收器。 Flume客户端将事件发送到源,后者将事件批量放入称为通道的临时缓冲区,然后将数据从该缓冲区流式传输到连接到数据最终目标的接收器。接收器也可以是其他Flume代理的后续数据源。可以链接代理,每个代理都有多个源,通道和接收器。
大数据流处理:Flume,Kafka和NiFi比较
Flume是一个分布式系统,用于收集,聚合和传输流事件到Hadoop。它有许多内置的源,通道和接收器,如Kafka通道和Avro接收器。 Flume是基于配置的,具有一个拦截器,可以对通道中的数据执行简单的转换。
如果您不小心,使用Flume很容易丢失数据。例如,选择用于高吞吐量的存储器通道具有以下缺点:当代理节点关闭时数据丢失。文件通道将以延迟增加为代价提供持久性。即便如此,由于数据未复制到其他节点,因此文件通道仅与底层磁盘一样可靠。 Flume通过多跳/扇入扇出提供可扩展性。对于高可用性(HA),可以水平扩展代理。
阿帕奇卡夫卡
Kafka是一种分布式高吞吐量消息总线,可将数据生成者与消费者分开。消息按主题组织,主题分为多个分区,分区在群集中的节点之间复制(称为代理)。与Flume相比,Kafka具有更好的可扩展性和消息持久性。 Kafka现在有两种样式:一种是“经典”生产者/消费者模型,另一种是新的Kafka-Connect,它为外部数据存储提供可配置的连接器(源/接收器)。大数据流处理:
Flume,Kafka和NiFi比较
Kafka可用于大型软件系统组件之间的事件处理和集成。此外,Kafka附带了一个Kafka流,可用于简单的流处理,而无需像Apache Spark或Apache Flink这样的单独集群。
由于消息持久存储在磁盘上并在群集中复制,因此数据丢失并不像Flume那样常见。也就是说,无论是使用Kafka客户端还是使用Connect API,生产者/来源和消费者/接收者通常都需要自定义编码。与Flume一样,消息的大小也有限制。最后,为了能够进行通信,Kafka生产者和消费者必须就协议,格式和体系结构达成一致,这在某些情况下可能会有问题。
Apache NiFi
与Flume和Kafka不同,NiFi可以处理任何大小的消息。在基于Web的拖放式用户界面背后,NiFi在群集中运行并提供实时控制,从而可以轻松管理任何源和任何目标之间的数据移动。它支持不同格式,模式,协议,速度和大小的分散和分布式源。
NiFi可用于任务关键型数据流,具有严格的安全性和合规性要求,我们可以将整个过程可视化并实时进行更改。在撰写本文时,它有近200个即用型处理器(包括Flume和Kafka处理器),可以立即拖放,配置和投入使用。 NiFi的一些关键功能是每个连接的优先级排队,数据跟踪和背压阈值配置。
虽然NiFi用于创建容错生产管道,但它不会复制像Kafka这样的数据。如果节点发生故障,则可以将流定向到另一个节点,但排队等待故障节点的数据必须等待节点恢复。 NiFi不是一个成熟的ETL工具,不适合复杂的计算和事件处理(CEP)。要做到这一点,它应该连接到流式框架,如Apache Flink,Spark Streaming或Storm。
组合
没有工具符合您的所有要求。组合以更好的方式执行不同操作的工具可以增强功能并增加处理更多场景的灵活性。根据您的需求,NiFi和Flume可以充当Kafka生产商或消费者。
Flume-Kafka集成非常受欢迎,它有自己的名字:Flafka(我不这样做)。 Flafka包括Kafka来源,Kafka频道和Kafka泳池。结合Flume和Kafka,Kafka可以避免自定义编码并利用Flume经过验证的资源和接收器。通过Kafka渠道的Flume事件将在Kafka代理中存储和复制,以实现弹性。组合工具可能看起来很浪费,因为它似乎在功能上重叠。例如,NiFi和Kafka都提供代理商来连接生产者和消费者。但是,它们的表现不同:在NiFi中,大多数数据流逻辑不在生产者/消费者中,而是在代理中,允许集中控制。 NiFi是为了做一件重要的事情而构建的:数据流管理。通过两种工具的结合,NiFi可以充分利用Kafka可靠的流数据存储,同时解决Kafka无法解决的数据流挑战。