flume,kafka区别、协同与详解

时光毁灭记忆、已成空白 提交于 2019-11-27 06:08:34

 

  简介 socket模式 简单数据处理 开发公司
Flume

日志采集系统

(管道流方式,提供了很多的默认实现,让用户通过参数部署,及扩展API.)

  1. 可以单独执行linux命令,作为client将输出写入hdfs (例如tail命令)来监听日志
  2. 可作为server监听端口,同时作为client将收到信息写入hdfs
可编写Interceptor,对数据进行拦截,对密码进行MD5加密再写入hdfs

Cloudera

Kafka 消息中间件(一个可持久化的分布式的消息队列)
  1. 作为双server系统,1个server用于获取数据、另一个用于监听接入的client的消费数据请求
  2. kafka和JMS(Java Message Service)实现(activeMQ)不同的是:即使消息被消费,消息仍然不会被立即删除
流处理系统,也就是作为一个缓存(数据量大的时候会保存到本地硬盘,不单单是内存),生产消息太多了,消费不过来,就先存着。 Linkedin

Flume最早是Cloudera提供的日志收集系统,目前是Apache下的一个孵化项目

Kafka是知名社交网络公司LinkedIn于2010年12月份开源的分布式消息系统,主要由Scala语言开发,于2012年成为Apache顶级项目,目前被广泛应用在包括Twitter,Netffix和Tumblr等在内的大型互联网站点上。

 

使用命令:

  创建接收server  
Flume
flume-ng agent -c conf -f flume-demo-hdfs.conf --name agent1 -Dflume.root.logger=INFO,Console

根据conf文件配置来配置:

agent1.sources = source1
agent1.sinks = sink1
agent1.channels = channel1
 
agent1.sources.source1.type = exec
agent1.sources.source1.command = tail -f /var/log/1.log
 
agent1.sinks.sink1.type = hdfs
agent1.sinks.sink1.hdfs.path = hdfs://<namenode_server_ip>:8020/flume/test/data
agent1.sinks.sink1.hdfs.filePrefix = events-
agent1.sinks.sink1.hdfs.fileType = DataStream
agent1.sinks.sink1.hdfs.writeFormat = Text
agent1.sinks.sink1.hdfs.roundUnit = minute
 
agent1.channels.channel1.type = memory
agent1.channels.channel1.capacity = 100
agent1.channels.channel1.transactionCapacity = 100
 
agent1.sources.source1.channels = channel1
agent1.sinks.sink1.channel = channel1

 

 
Kafka
创建topic:
kafka-topics --create --zookeeper zookp-server-2:2181 --replication-factor 1 --partitions 1 --topic test2
创建消息生产者并逐行输入消息(打开后可以用键盘输入,按回车即发送消息。注意somehost不能为localhost):
kafka-console-producer --broker-list somehost:9092 --topic test2
创建消费者并持续接收消息:
kafka-console-consumer --bootstrap-server somehost:9092 --topic test2 --from-beginning  --zookeeper zookp-server-2:2181

其他命令详解:Kafka 学习笔记之 Kafka0.11之console-producer/console-consumer: — kafka命令大全

 

 

Flume也可以打开端口来监听,其配置文件为:

agent1.sources = source1
agent1.sinks = sink1
agent1.channels = channel1
 
agent1.sources.source1.type = netcat
agent1.sources.source1.bind = 0.0.0.0
agent1.sources.source1.port = 9999
 
agent1.sinks.sink1.type = logger
 
agent1.channels.channel1.type = memory
agent1.channels.channel1.capacity = 1000
agent1.channels.channel1.transactionCapacity = 100
 
agent1.sources.source1.channels = channel1
agent1.sinks.sink1.channel = channel1

启动命令为:

flume-ng agent -c conf -f conf/flume-demo-logger.conf --name agent1 -Dflume.root.logger=INFO,Console

 

  1. Kafka 是一个非常通用的系统。你可以有许多生产者和很多的消费者共享多个主题Topics。相比之下,Flume是一个专用工具被设计为旨在往HDFS,HBase发送数据。它对HDFS有特殊的优化,并且集成了Hadoop的安全特性。如果数据被多个系统消费的话,使用kafka;如果数据被设计给Hadoop使用,使用Flume。
  2. Flume可以使用拦截器实时处理数据。这些对数据屏蔽或者过量是很有用的。Kafka需要外部的流处理系统才能做到。
  3. Kafka和Flume都是可靠的系统,通过适当的配置能保证零数据丢失。然而,Flume不支持副本事件。于是,如果Flume代理的一个节点奔溃了,即使使用了可靠的文件管道方式,你也将丢失这些事件直到你恢复这些磁盘。如果你需要一个高可靠行的管道,那么使用Kafka是个更好的选择。
  4. 相对于日志采集:日志采集。线上数据一般主要是落地文件或者通过socket传输给另外一个系统。这种情况下,你很难推动线上应用或服务去修改接口,直接向kafka里写数据。这时候你可能就需要flume这样的系统帮你去做传输。

多系统联动详解:Flume+Kafka+Storm+Redis构建大数据实时处理系统

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!