采集工具(一下中传递的一个数据单元即称为事件(组图))
优采云 发布时间: 2021-09-16 09:09采集工具(一下中传递的一个数据单元即称为事件(组图))
什么是水槽
在简要介绍卡夫卡之后,让我们来看看另一个工具水槽
让我们先回顾一下data采集的过程:当用户使用客户端时,无论是app、网页还是applet,都会通过HTTP链接将用户的使用数据传输到后端服务器,服务器上运行的服务会将返回的数据以日志的形式保存在服务器上,从日志到最终将数据放入HDFS或进入实时计算服务,我们仍然需要一些传输
当然,有很多方法可以实现这个过程。例如,在java开发中,我们可以在Kafka-log4j-appender类库的帮助下,将log4j(日志类库)记录的日志同步到Kafka消息队列,Kafka将它们传输到下游任务。然而,这种方法相对简单,不适合*敏*感*词*的聚类处理。因此,有一个采集测井工具,即水槽
Flume是一个高度可用的分布式日志采集和传输系统。水槽由三个主要部分组成:源、槽和汇。这三个部分构成一个代理。每个代理是一个独立的单元,源、通道和*敏*感*词*有不同的类型,可以根据需要选择:
水槽中的概念
1.源
源是负责接收输入数据的部分。震源有两种工作模式:
主动拉取数据
等待数据传输
获取数据后,源将数据传输到通道
2.通道
通道是一个中间链路,是临时存储数据的一部分。频道还可以使用不同的配置,例如内存、文件甚至数据库
3.*敏*感*词*(水槽)
*敏*感*词*是封装的输出部件。选择不同类型的*敏*感*词*将从通道获取数据并将其输出到不同的位置。例如,输出到HDFS时使用HDFS*敏*感*词*
4.事件
在水槽中传递的数据单元称为事件
5.agent
如前所述,代理是一个独立的运行单元,由源、通道和*敏*感*词*组成。一个代理中可能有多个组件
卡夫卡与水槽的比较
可以看出,flume和Kafka在数据传输方*敏*感*词*有相似的实现原则,但这两种工具有各自的重点
卡夫卡更注重数据存储和流数据的实时处理。它是一种追求高吞吐量和高负载的消息队列
Flume专注于采集和数据传输,并提供了许多接口来支持多个数据源的采集,但Flume不直接提供数据持久性
Flume在吞吐量和稳定性方面不如Kafka。因此,在使用场景中,如果需要以不同的数据生产和消耗速度在两个系统之间传输数据,例如,实时生成的数据的生产速度经常会发生变化,并且在不同的时间段会出现不同的峰值。如果直接写入HDFS,可能会发生拥塞。在此过程中添加卡夫卡,可以先将数据写入卡夫卡,然后将卡夫卡传输到下游。Flume提供了更多封装组件,并且更轻。它最常用于记录采集,这节省了大量的编码工作
由于卡夫卡和水槽各自的特点,在实际工作中,卡夫卡和水槽是一起使用的。例如,在线数据进入日志后,flume使用采集,然后传输到Kafka,然后传输到计算框架MapReduce、spark、Flink等,或者持久存储在HDFS文件系统中
总结
在我的工作中,我对flume和Kafka最基本的感觉是它们可以用来传输数据,但它们实际上有自己的功能和特点,在特定的使用场景中有很大的不同。因此,在使用卡夫卡时,应根据具体需要选择水槽或两者的组合。Cloudera甚至开发了一种新的工具,flafka,它结合了两者的特点