大数据摄取:Flume,Kafka和NiFi

初赛

在构建大数据管道时,我们需要考虑如何吸收出现在通常是Hadoop生态系统大门口的数据量,多样性和速度。 在决定采用哪种工具来满足我们的要求时,诸如可伸缩性,可靠性,适应性,开发时间成本等方面的初步考虑都将发挥作用。 在这篇文章中。 我们将简要介绍三个Apache提取工具: FlumeKafkaNiFi 。 所有这三种产品均具有出色的性能,可以水平缩放,并提供一种插件架构,可以通过自定义组件扩展功能。

阿帕奇水槽

Flume部署由一个或多个配置了拓扑的代理组成。 Flume Agent是一个JVM进程,它承载Flume拓扑的基本构建块,即源,通道和接收器。 Flume客户端将事件发送到源,源将这些事件成批放置到称为通道的临时缓冲区中,然后数据从那里流到连接到数据最终目标的接收器。 接收器也可以是其他Flume代理的后续数据源。 代理可以链接起来,并且每个都有多个源,通道和接收器。

Flume是一个分布式系统,可用于收集,聚合流事件并将其传输到Hadoop中。 它带有许多内置源,通道和接收器,例如Kafka Channel和Avro接收器。 Flume基于配置,并具有拦截器 ,可对运行中的数据执行简单的转换。

如果不小心,很容易使用Flume丢失数据。 例如,选择内存通道以实现高吞吐量具有不利的一面,即当代理程序节点发生故障时,数据将丢失。 文件通道将以增加延迟为代价提供持久性。 即使这样,由于数据不会复制到其他节点,因此File通道仅与基础磁盘一样可靠。 Flume确实通过多跳/扇入扇出流提供了可伸缩性。 对于高可用性(HA),可以水平缩放代理。

阿帕奇·卡夫卡

Kafka是一种分布式的高吞吐量消息总线,可数据生产者与消费者分离 。 消息按主题进行组织,主题被划分为多个分区,并且跨集群中的节点(称为代理)复制分区。 与Flume相比,Kafka具有更好的可伸缩性和消息持久性。 Kafka现在有两种形式:“经典”生产者/消费者模型,以及新的Kafka-Connect ,它提供了到外部数据存储的可配置连接器(源/接收器)。

Kafka可用于事件处理以及大型软件系统的组件之间的集成。 开箱即用地处理数据峰值和背压 (快速生产,缓慢消费)。 此外,Kafka附带有Kafka Streams ,可以将其用于简单的流处理,而无需像Apache Spark或Apache Flink那样需要单独的集群。

由于消息在磁盘上持久保存并在群集中复制,因此数据丢失的情况比Flume少见。 也就是说,使用Kafka客户端或通过Connect API,生产者/源和消费者/接收者通常需要自定义编码。 与Flume一样,邮件大小也有限制。 最后,为了能够进行通信,Kafka的生产者和消费者都必须就协议,格式和模式达成共识,这在某些情况下可能会出现问题。

Apache NiFi

NiFl与Flume和Kafka不同。 可以处理任意大小的消息。 NiFi在基于Web的拖放式UI的背后,在群集中运行,并提供实时控制,可轻松管理任何源与任何目标之间的数据移动。 它支持格式,架构,协议,速度和大小不同的分散源。

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并非旨在解决的数据流挑战。

结论

总结:

还有更多要讨论的内容,但这将是书的主题而不是文章。 另外,由于此处提到的工具正在Swift发展,因此与所有其他有关新兴技术的简短分析一样,迟早也必将过时。

翻译自: https://www.javacodegeeks.com/2017/07/big-data-ingestion-flume-kafka-nifi.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/349769.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

__repr__

class Item: def __init__ (self, name, price): self.name name self.price price # 创建一个Item对象,将之赋给im变量 im Item(鼠标, 29.8) # 打印im所引用的Item对象 print(im) 先看下面程序: 上面程序创建了一个 Item 对象,然后使用 p…

__getattribute__

在类 里面,其实并没有方法这个东西,所有的东西都保存在属性里面,所谓的调用方法其实是类里面的一个同名属性指向了一个函数(方法),返回的是函数的引用,再用 函数() 这种方式就可以调用它 在调用实例的方法的时候,实际上给对象传过去的只是一个字符串而已, 比如 t Test()…

使用精确的Java方法参数

了解如何在Java应用程序中选择正确的方法参数类型并获得更健壮和更短的代码。 我们Java开发人员通常有一个使用方法参数的坏习惯,即不考虑实际需要什么,而只是选择我们习惯的,可用的或首先想到的东西。 考虑以下代表性示例: pri…

Android external storage

File sdCard Environment.getExternalStorageDirectory(); File directory_pictures new File(sdCard, "Pictures"); Log.i(TAG,"directory_pictures"directory_pictures); 存储在external storage 这类文件不应该存在SD卡的根目录下,而应该存…

EnjoyingSoft之Mule ESB开发教程第六篇:Data Transform - 数据转换

目录 1. 数据转换概念2. 数据智能感知 - DataSense3. 简单数据转换组件3.1 Object to JSON3.2 JSON to XML3.3 JSON to Object3.4 XML to JSON4. 企业版的DataWeave Transformer(可视化高级数据转换器)5. 社区版的InfoMapper(自研的可视化数据转换器)本篇主要介绍在Mule ESB中使…

反射和内省_单例设计模式–内省和最佳实践

反射和内省定义: Singleton是“ 四人帮”设计模式的一部分,它属于创新设计模式。 在本文中,我们将更深入地研究Singleton模式的用法。 就建模而言,它是最简单的设计模式之一,但另一方面,就使用的复杂性而言…

福利预告,跳一跳助手即将发布,您不知道还有这些...

福利预告,跳一跳助手即将来临 一周后,即2月9号正式发布 跳一跳助手,免费免费免费提供! 透露一下 跳一跳助手的界面是这样滴: 这工具有啥用? 举个栗子: 花城君用该工具,不小心就玩到…

Redis Client Lettuce 5 GA发布

经过13个月的开发阶段和208张已解决的故障单&#xff0c;我很高兴宣布Lettuce 5.0全面上市。 这是一个主要发行版&#xff0c;带有一些重大更改&#xff0c;新的有趣功能以及Java 9兼容性。 从Maven Central获取发布 <dependency><groupId>io.lettuce</groupI…

NOIP模拟测试14「旋转子段·走格子·柱状图」

旋转子段 连60分都没想&#xff0c;考试一直肝t3&#xff0c;t2&#xff0c;没想到t1最简单 我一直以为t1很难&#xff0c;看了题解发现也就那样 题解 性质1 一个包含a[i]旋转区间值域范围最多为min(a[i],i)----max(a[i],i) 感性理解 举个例子,例如3 7 1 4 5 6 2 这个子段包含a…

检测域名是否到期

如果你想做一个网站&#xff0c;首先需要购买一个域名&#xff0c;与其说是购买不如说是租用&#xff0c;因为你要想使用这个域名&#xff0c;每年都需要缴纳一笔费用。既然是租用&#xff0c;所以就有期限&#xff0c;在到期前没有续费&#xff0c;则该域名会被收回&#xff0…

jax-ws cxf_走向REST:在Spring和JAX-RS(Apache CXF)中嵌入Jetty

jax-ws cxf对于服务器核心Java开发人员来说&#xff0c;向世界“展示”的唯一方法是使用API​​。 今天的帖子都是关于JAX-RS的 &#xff1a;使用Java编写和公开RESTful服务。 但是&#xff0c;我们不会使用涉及应用程序服务器&#xff0c;WAR打包以及诸如此类的传统的重量级方…

问题 1046: [编程入门]自定义函数之数字后移

题目描述有n个整数&#xff0c;使前面各数顺序向后移m个位置&#xff0c;最后m个数变成前面m个数。写一函数&#xff1a;实现以上功能&#xff0c;在主函数中输入n个数和输出调整后的n个数。输入输入数据的个数n n个整数 移动的位置m输出移动后的n个数样例输入10 1 2 3 4 5 6 7…

Reliable Multicast Programming(PGM)协议

Reliable Multicast Programming (PGM)实际通用可靠多播协议&#xff0c;在某种程度上保证多播的可靠性。是IP上层协议&#xff0c;和TCP还有UDP同级&#xff0c;工作在传输层。 在组播传输视频项目中&#xff0c;发现在网络较差的时候&#xff0c;组播传输视频性能下降迅猛&am…

P1488 肥猫的游戏

P1488 肥猫的游戏https://www.luogu.org/problem/P1488 博弈论一个三角形&#xff0c;只有三种情况&#xff1a;1邻接&#xff0c;2邻接&#xff0c;3邻接主要是2邻接的情况比较麻烦边<0,n-1>需要特判一下 #include <iostream> #include <cstdio> #include &…

使用OAuth2令牌的安全REST服务

1.简介 在本教程中&#xff0c;我们将介绍如何将Spring Security与OAuth结合使用以保护REST服务。 在演示应用程序中&#xff0c;可以使用路径模式&#xff08; / api / ** &#xff09;访问服务器上受保护的REST资源&#xff0c;以便基于该路径的请求URL映射到不同的控制器方法…

java 内联调用深度_Java中内联虚拟方法调用的性能

java 内联调用深度总览 动态编译的好处之一是它能够支持在虚拟方法代码上的广泛方法内联。 内联代码可提高性能时&#xff0c;代码仍必须检查类型&#xff08;以防由于优化而更改了类型&#xff09;或在多个可能的实现之间进行选择。 这导致了问题。 通过接口调用的方法的多个…

组件切换方式(Vue.js)

这里&#xff0c;我用一个注册登录两组件的切换实例来演示&#xff1a; 切换方式一 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8" /><title>独秀不爱秀</title> </head><body><div …

在GWT中序列化/反序列化Json

JSON和GWT 最近&#xff0c; GWT用户小组中进行了有趣的讨论 &#xff0c;涉及在客户端对JSON进行序列化/反序列化的最佳实践。 这篇文章旨在突出其重点。 到目前为止&#xff0c;在GWT中有三种将对象转换为JSON并从客户端转换回JSON的方法&#xff1a; gwt-jackson框架&#…

NOIP模拟测试15「建造城市city(插板法)·轰炸·石头剪刀布」

建造城市 题解 先思考一个简单问题 10个$toot$ 放进5间房屋&#xff0c;每个房屋至少有1个$toot$&#xff0c;方案数 思考&#xff1a;插板法&#xff0c;$10$个$toot$有$9$个缝隙&#xff0c;$5$间房屋转化为$4$个挡板&#xff0c;放在toot缝隙之间得到$C_{9}^{4}$ 10个$toot$…

弹簧和线程:TaskExecutor

在Web应用程序中使用线程并不常见&#xff0c;尤其是当您必须开发长期运行的任务时。 考虑到spring&#xff0c;我们必须格外注意并使用它已经提供的工具&#xff0c;而不是生成我们自己的线程。 我们希望线程由spring管理&#xff0c;因此能够在不产生任何影响的情况下使用应…