同样是流式数据采集框架,
flume一般用于日志采集,可以定制很多数据源,减少开发量,基本架构是一个flume进程agent(source、拦截器、选择器、channel<Memory Channel、File Channel>、sink),其中传递的是原子性的event数据;
使用双层Flume架构可以实现一层数据采集,一层数据集合;
Flume的概念、基本架构
kafka一般用于日志缓存,是一个可持久的分布式消息队列,自带存储,提供push和pull两种存储数据功能;包括producer、kafkaCluster(broker:topic、partition)、consumer,依赖于Zookeeper(brokerid、topic、partition元数据存在ZNode,partition选举leader依赖Zookeeper);
Kafka的概念、基本架构
区别点一:
flume和kafka的侧重点不同,
而flume追求的是数据和数据源、数据流向的多样性,适合多个生产者的场景;flume有自己内置的多种source和sink组件,具体操作方式是编写source、channel和sink的.conf配置文件,开启flume组件的时候用命令关联读取配置文件实现;
# 开启flume的脚本部分:
$FLUME_HOME/bin/flume-ng
agent
-c $FLUME_HOME/conf
-f $JOB_HOME/flume-hdfs.conf
-n agent-hdfs
-Dflume.root.logger=info,
console >$FLUME_HOME/logs/flume-hdfs.log 2>&1 &
-c:flume启动读取的配置文件flume-env.sh(指定JDK路径)存储在/conf目录中
-f:编写好source、interceptor、selector、channel和sink的配置文件flume-hdfs.conf的存储目录
-n:表示给flume-hdfs.conf中的agent起名为agent-hdfs
--------------------以下可不写-------------------
-D:表示flume运行时动态修改flume.root.logger参数属性值,并将控制台日志打印级别设置为INFO级别。日志级别包括:log、info、warn、error,仅为Debug使用,生产环境一般不用
# 开启flume的脚本部分:
$FLUME_HOME/bin/flume-ng
agent
-c $FLUME_HOME/conf
-f $JOB_HOME/flume-hdfs.conf
-n agent-hdfs
-Dflume.root.logger=info,
console >$FLUME_HOME/logs/flume-hdfs.log 2>&1 &
-c:flume启动读取的配置文件flume-env.sh(指定JDK路径)存储在/conf目录中
-f:编写好source、interceptor、selector、channel和sink的配置文件flume-hdfs.conf的存储目录
-n:表示给flume-hdfs.conf中的agent起名为agent-hdfs
--------------------以下可不写-------------------
-D:表示flume运行时动态修改flume.root.logger参数属性值,并将控制台日志打印级别设置为INFO级别。日志级别包括:log、info、warn、error,仅为Debug使用,生产环境一般不用
console:打印日志发送路径
kafka追求的是高吞吐,高负载,同一topic下可以有多个partition,由于是pull模式拉取数据,因此适合多个消费者的场景;kafka没有内置的producer和consumer组件,需要自己编写代码。
区别点二:
flume和kafka的定位有所不同:
1. flume
cloudera公司研发,适合多个生产者;
适合下游数据消费者不多的情况;(一个消费者开一个channel)
适合数据安全性要求不高的操作;(数据没有备份、没有副本)
适合与Hadoop生态圈对接的操作。(HDFS、Hbase等)
适合生产和收集数据
2. kafka
linkedin公司研发,适合多个消费者;
适合数据下游消费众多的情况;(kafka从磁盘读,并且只找Leader读)
适合数据安全性要求较高的操作,支持replication(多副本)。
适合消费数据
因此工作中常用的一种模型是:
线上数据 --> flume --> kafka --> HDFS --> hive/MR计算
--> SparkStreaming计算
也有kafka与springboot组合,采集数据后交给sparkStreaming进行流式计算