一、Flume

http://flume.apache.org/FlumeUserGuide.html

Flume是一个分布式的,可靠的,可用的,非常有效率的对大数据量的日志数据进行收集、聚集、移动信息的服务。

1. 架构方式

1)所有应用使用一台flume服务器;

2)所有应用共享flume集群;

3)每个应用使用一台flume,然后使用一个flume节点收集分散的flume数据;

2. flume组件

1)启动的每个flume进程(jvm进程),称为agent

每个flume agent:

source:与外部数据源结合,获取或者接收数据

(1)source主动从外部数据源上获取数据

(2)source接收外部数据源发送过来的数据

channel:缓存,类似队列,先进先出

(1)容错: File channel

(2)缓冲

sink:从channel里面获取数据,发送出去

flume:就是简单地选择合适的source、channel、sink类型

二、安装部署

1)下载安装包

2)解压安装

3)修改配置文件

flume-env.sh.template  -> flume-env.sh.template

JAVA_HOME

JAVA_OPTS

4)说明

(1)agent里面的sink,只能从一个channel里面获取数据

(2)source可以将数据发送到多个chanel

(3)channel可以让多个sink来获取数据

5)官方示例 http://flume.apache.org/FlumeUserGuide.html

(1)在conf目录下创建agent子目录,配置example01.conf

(2)如何启动flume agent

进入$FLUME_HOME

--conf  指定flume进程的配置

--conf-file指定flume-agent的配置

bin/flume-ng agent -n a1 -c conf/ -f conf/agents/example01.conf -Dflume.root.looger=INFO,CONSOLE

netstat -tlnup | grep 44444

测试结果: nc hostanme 44444

sudo yum -y install nc

如果nc命令不存在,则安装nc命令

socket client

netcat source 44444

memory channel

logger sink

6)常用的source、channel、sink类型

source:

(1)avro source:

avro 二进制数据传输协议

protobuf

json

xml

(2)netcat source

(3)http source

(4)spooldir source: 监听本地文件系统的目录

(5)exec source: tail -F 监听本地文件系统的一个文件

channel:

(1)memory channel: 快、agent服务器重启时数据会丢失

(2)file channel:慢、可以保证数据不会被丢失;会记录数据以及检查点checkpoint(记录上次处理后截止的地方,sink上一次从哪个位置获取数据)

sink:

(1)logger sink

(2)hdfs sink: 上传数据到hdfs

(3)kafka sink:将数据传送到kafka上

(4)avro sink:连接不同的agent

(5)file sink

avro sink -> avro source

7)案例avro source + file channel + hdfs sink

如果hdfs目录使用了时间变量的话,一定要将useLocalTimeStamp值设为true

hdfs.rollInterval: 间隔一定时间生成新的文件

hdfs.roollSize: 接收到一定大小数据量写到新的文件

hdfs.roolCount: 次数

配置:以上三个互相之间是不兼容的

将其中两个值设为0,启用第三个

secondaryname 从namenode节点上拿edits文件进行合并:

edits文件大小

bin/flume-ng agent -n a1 -c conf/ -f conf/agents/example02.conf -Dflume.root.looger=INFO,CONSOLE

bin/flume-ng avro-client help

8)案例spool source + memory channel + hdfs sink

flume数据在source/channel/sink之间传输的形式:

event

headers: 用来路由,根据规则多路复用

body:

注意:

(1)spooldir监听的目录一定要先存在,而且要有访问权限

(2)监听的目录里面文件名不能重复

生产上每天要上传相同的文件到hdfs上,解决办法就是在原来的文件名称后面加个时间戳或者其他唯一字符串。

9)exec source + memory channel  + logger sink

nginx服务器:

下载安装包,上传到服务器;

解压,三步安装

预编译

编译

编译安装

添加nginx服务,先在

/etc/init.d/目录下创建一个空的nginx文件,然后将windows上nginx文件内容复制进去,保存修改权限755

sudo service nginx start 启动

配置nigin日志数据接口地址:

kill -9 `ps -ef | grep flume | awk '{print $2}' | head -n 1`

curl -X POST -d 'content' host

http soure:

http header ---> flume events headers

http body  ----> flume events body

10)

failover容错模式(负载均衡模式):一个event只会进入其中一个channel里面,配置agent的时候,给每个sink一个权重值。

多路复用模式:路由,根据event headers中的某个key值来选择某个channel;

二、Kafka

1. 分布式消息订阅发布系统

消息队列

J2EE 消息总线 esb

消息队列: rabbitMQ activeMQ zeroMQ

消息生产者:

消息消费者:

RPC服务: 通过消息队列

服务提供方作为消费的消费者

服务请求方作为消息的生产者,request请求

服务请求方与服务提供方之间无需互相知道,进行解耦

分布式部署

结合实时流处理框架,消费者:storm、spark streaming流式处理框架

kafka将数据写入磁盘上(顺序读写),随机读写(寻道时间)

kafka消息队列与传统rabbitmq:

log.dirs

2. kafka安装部署

http://kafka.apache.org/downloads.html

5)检查运行

producer:

consumer:

(1)创建topic:test

./kafka-topics.sh --create --zookeeper host --topic test --partitions 1 --

kafka-topics.sh

kafka中topic:逻辑概念

物理上:每个topic在kafka集群上存储,以分区存储

partition broker节点磁盘上一段连续存储空间

备份数:跨节点备份

每个分区的信息:

Leader对于备份来说

对于一条信息的多个备份,存储在不同的broker

Isr 指定某个分区的备份在哪些broker上面

Isr: 0 1 2

Leader对写有影响:生产者往toipc发布消息,要确认是否发布成功,有三种确认机制

参数: requireAcks

不确认,只管发布消息    0

只确认是否在Leader上发布成功   1

确认所有备份都发布成功  -1

(2)使用producer往topic发布消息

producer:往往是由外部需要使用kafka集群的系统来编写

flume:kafkasink

log.dirs目录

offset:偏移量

消息在kafka存储位置的确认:topic、partition的位置、偏移量

分区中存储的消息文件:

test-0 test-1

topic名称-partition编号

xxxxx.index 索引文件

xxxxx.log 数据文件

partition: segment

(3)使用consumer从topic消费消息

外部谁要从kafka消费消息,由负责consumer编写

storm: storm-kafka项目

spark-streaming: spark kafaka消费者

flume: kafka source

./kafka-console-consumer.sh --zookeeper host:2181 --topic test --from-beginning

zookeeper:记录消费者上次消费者的位置offset,记录了集群的broker位置

三、Kafka继承Flume

1、kafka sink

(1)netcat source + memory channel + kafka sink

flume:

先编写agent配置文件

kafka消息保留时间,默认 7天 7* 24h = 168h

2、kafka source(很少使用,了解)

《OD学Flume》20160806Flume和Kafka的更多相关文章

  1. Flafka: Apache Flume Meets Apache Kafka for Event Processing

    The new integration between Flume and Kafka offers sub-second-latency event processing without the n ...

  2. 《OD学hive》第四周0717

    一.Hive基本概念.安装部署与初步使用 1. 后续课程 Hive 项目:hadoop hive sqoop flume hbase 电商离线数据分析 CDH Storm:分布式实时计算框架 Spar ...

  3. Flume Channel Selectors + kafka

    http://flume.apache.org/FlumeUserGuide.html#custom-channel-selector 官方文档上channel selectors 有两种类型: Re ...

  4. 消费滚动滴log日志文件(flume监听,kafka消费,zookeeper协同)

    第一步:数据源 手写程序实现自动生成如下格式的日志文件: 15837312345,13737312345,2017-01-09 08:09:10,0360 打包放到服务器,使用如下命令执行,模拟持续不 ...

  5. 《OD学hadoop》20160903某旅游网项目实战

    一.大数据的落地点 1.数据出售 数据商城:以卖数据为公司的核心业务 2. 数据分析 百度统计 友盟 GA IBM analysis 3.搜索引擎 4. 推荐系统 mahout 百分比 5.精准营销 ...

  6. 《OD学storm》20160828

    一.Storm项目 1. 架构 javasdk -> nginx -> 日志文件 -> flume agent(collector) -> hdfs -> kafka - ...

  7. Flume下读取kafka数据后再打把数据输出到kafka,利用拦截器解决topic覆盖问题

    1:如果在一个Flume Agent中同时使用Kafka Source和Kafka Sink来处理events,便会遇到Kafka Topic覆盖问题,具体表现为,Kafka Source可以正常从指 ...

  8. 《OD学HBase》20160821

    一.HBase性能调优 1. JVM内存调优 MemStore内存空间,设置合理大小 memstore.flush.size 刷写大小 134217728 = 128M memstore.mslab. ...

  9. 《OD大数据实战》Kafka入门实例

    官网: 参考文档: Kafka入门经典教程 Kafka工作原理详解 一.安装zookeeper 1. 下载zookeeper-3.4.5-cdh5.3.6.tar.gz 下载地址为: http://a ...

随机推荐

  1. Mrt render

    mutil render target Pixel shder输出一个结构体 Out.f4Color Out.f4Normal 这步在渲染物体的shader里 在application setcolo ...

  2. 女性社区TOP10

    “女性和孩子的钱是世界上最好赚的”并不是一句空话.据统计,女性掌管着家庭70%的支出,如果你能让女性为你掏出腰包,那么你基本就掌控了一个家庭的大部分的消费. 有趣的是,女性还是一个喜欢分享的群体,他们 ...

  3. .NET设计模式(12):外观模式(Façade Pattern)(转)

    概述 在软件开发系统中,客户程序经常会与复杂系统的内部子系统之间产生耦合,而导致客户程序随着子系统的变化而变化.那么如何简化客户程序与子系统之间的交互接口?如何将复杂系统的内部子系统与客户程序之间的依 ...

  4. ios中webservice报文的拼接

    1.报文头需要密码验证的 - (void)sendAsynWebServiceRequest:(NSString *)nameSpace method:(NSString *)method reque ...

  5. [翻译]Kafka Streams简介: 让流处理变得更简单

    Introducing Kafka Streams: Stream Processing Made Simple 这是Jay Kreps在三月写的一篇文章,用来介绍Kafka Streams.当时Ka ...

  6. Extjs文本输入域

    var form = Ext.create('Ext.form.Panel', {             renderTo: Ext.getBody(),             frame: tr ...

  7. HDU 1671 Phone List(字符处理)

    题目 用字典树可以过,可是我写的字典树一直各种错误,,, 所以,我用了别的更简便的方法.. //去你妹的一直有问题的字典树!!! ////字典树,树的根是空的 // ////#include<i ...

  8. HDU 3790 最短路径问题(SPFA || Dijkstra )

    题目链接 题意 : 中文题不详述. 思路 :无论是SPFA还是Dijkstra都在更新最短路的那个地方直接将花费更新了就行,还有别忘了判重边,话说因为忘了判重边WA了一次. #include < ...

  9. html + css + js注释规范

    添加注释到代码中,是一个很好的习惯,而且极大的提高了代码的可读性 1.HTML <!--commentContent--> 2.CSS //commentContent /*comment ...

  10. 在Jmeter中使用自定义编写的Java测试代码

    我们在做性能测试时,有时需要自己编写测试脚本,很多测试工具都支持自定义编写测试脚本,比如LoadRunner就有很多自定义脚本的协议,比如"C Vuser","Java ...