Flume的介绍
一个分布式的、高可靠、高可用日志收集和汇总的工具
能够将大批量的不同数据源的日志数据收集、聚合、移动到数据中心进行存储
是Apache软件基金会下、Hadoop生态系统中的一个开源项目
在实际中,Flume的使用不仅仅局限于日志数据收集聚合,还可以用于传输网络流量数据、社交媒体数据、电子邮件消息等。
Flume通过在数据产生的节点上启动agent来收集数据,并推送给其他的Flume的agent或者HDFS、Hbase等数据存储系统。一个agent就是一个java进程,它包括了三个组件:
Source:从产生数据的数据源接收数据,并以event事件的形式发送给channel。一个source可以将数据发送给多个channel。
Channel:从source接收和临时存储数据(以内存或者文件形式存储),直到sink将数据消费掉。Channel是source和sink之间的桥梁,如图7-8所示。
Sink:从channel获取数据并消费,将数据发送给其他的agent或者HDFS等数据存储设施。
以event进行传输
Flume将传输的数据封装为event
event是Flume内部数据传输的最基本单元
一个event包括了event headers、event body,其中event body就包含了Flume收集和传输的日志信息
保证可靠传输的缓存机制
在event从source流向channel再到sink的过程中,为了保证数据传输的可靠性,event在送达sink之前,会在channel中进行缓存,直到event可靠到达sink之后,channel才会删除缓存的数据
Spark Streaming可通过两种方式来与Flume进行整合
pull的方式:即Spark Streaming主动从Flume中拉取数据,这需要在Flume中使用Spark Streaming自定义的sink类型
push的方式:即Flume主动将数据发送给Spark Streaming
kafka是一个分布式消息队列,能够实现高吞吐量的分布式消息发布订阅
也是Apache软件基金会下属的一个应用Scala语言编写的开源流处理平台
由多个不同的应用程序来作为消息的生产者producer向Kafka集群写入消息,然后也会多个应用程序作为消息的消费者consumer来从Kafka集群中主动读取消息,并进行实时的数据分析
所以,Kafka在消息的生产者和消费者之间实现了解耦
Kafka按照消息的主题topic将消息分类存储
消息的生产者在向Kafka集群写入消息的时候,必须指定消息的主题
Kafka又将一个主题下的消息分为多个分区partition
当消息的生产者在写入一条指定主题的消息时,会根据一定的分配策略比如基于key值的hash策略将该条消息发送到该主题下的某个分区。
该条消息会以日志的形式追加到该分区当前记录的后面,并按照写入的时间顺序分配一个单调递增的顺序编号。这个编号也称为offset,是该条消息在分区内的ID
所以,每个主题下的分区是一个有序的消息序列
多副本存储:Kafka会持久化存储所有的消息,不管他们是否已经被消费者消费。为了进一步保证消息存储的可靠性,kafka中每个主题的分区会有多个副本以保证数据存储的可靠性
定期删除:Kafka的消息持久化机制并不会永远存储消息。Kafka会定期清理过期的消息日志。我们可以配置消息在Kafka中暂存的时长,比如2小时,以及对过期消息的处置方式,默认的方式是删除
程序略,有一些配置什么说不清楚就不写了。