flume,kafka区别、协同与详解

 

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

日志采集系统html

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

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

Clouderalinux

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

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

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文件配置来配置:bash

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也能够打开端口来监听,其配置文件为:socket

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构建大数据实时处理系统

相关文章
相关标签/搜索