Flume的使用案例

案例一:单一日志传输avro client

flume-avro-client.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
avro-client-agent.sources = r1
avro-client-agent.sinks = k1
avro-client-agent.channels = c1

# Describe/configure the source
avro-client-agent.sources.r1.type = avro
avro-client-agent.sources.r1.bind = localhost
avro-client-agent.sources.r1.port = 41414
#注意这个端口名,在后面的教程中会用得到

# Describe the sink
avro-client-agent.sinks.k1.type = logger

# Use a channel which buffers events in memory
avro-client-agent.channels.c1.type = memory

# Bind the source and sink to the channel
avro-client-agent.sources.r1.channels = c1
avro-client-agent.sinks.k1.channel = c1

文本准备

1
2
3
[hadoop@hadoop001 ~]$ echo "flume" >> data/flume-avro-client.test
[hadoop@hadoop001 ~]$ cat data/flume-avro-client.test
flume

sink启动命令

1
2
3
4
5
flume-ng agent \
--name avro-client-agent \
--conf $FLUME_HOME/conf \
--conf-file $FLUME_HOME/conf/flume-avro-client.conf \
-Dflume.root.logger=INFO,console

source启动命令

1
2
3
4
5
flume-ng avro-client \
--conf $FLUME_HOME/conf \
-H localhost \
-p 41414 \
-F ~/data/flume-avro-client.test

结果:

source端:

命令执行,event传输完后会退出。退出后再往文件添加数据,并不会传输到sink端,所以avro client的方式不适合于增量data。

sink端:

1
[INFO - org.apache.flume.sink.LoggerSink.process(LoggerSink.java:95)] Event: { headers:{} body: 66 6C 75 6D 65                                  flume }

Flume介绍与使用

一、Flume介绍与原理

Flume简介

​ Flume 作为 cloudera 开发的实时日志收集系统,受到了业界的认可与广泛应用。Flume 初始的发行版本目前被统称为 Flume OG(original generation),属于 cloudera。但随着 FLume 功能的扩展,Flume OG 代码工程臃肿、核心组件设计不合理、核心配置不标准等缺点暴露出来,尤其是在 Flume OG 的最后一个发行版本 0.9.4. 中,日志传输不稳定的现象尤为严重,为了解决这些问题,2011 年 10 月 22 号,cloudera 完成了 Flume-728,对 Flume 进行了里程碑式的改动:重构核心组件、核心配置以及代码架构,重构后的版本统称为 Flume NG(next generation);改动的另一原因是将 Flume 纳入 apache 旗下,cloudera Flume 改名为 Apache Flume。

​ Flume 在0.9.x and 1.x之间有较大的架构调整,1.x版本之后的改称Flume NG,0.9.x的称为Flume OG。

​ Flume目前只有Linux系统的启动脚本,没有Windows环境的启动脚本。

 Flume是Apache的顶级项目,官方网站:http://flume.apache.org/

Kafka为什么能那么快

​ Kafka的消息是保存或缓存在磁盘上的,一般认为在磁盘上读写数据是会降低性能的,因为寻址会比较消耗时间,但是实际上,Kafka的特性之一就是高吞吐率。

即使是普通的服务器,Kafka也可以轻松支持每秒百万级的写入请求,超过了大部分的消息中间件,这种特性也使得Kafka在日志处理等海量数据场景广泛应用。

针对Kafka的基准测试可以参考,Apache Kafka基准测试:每秒写入2百万(在三台廉价机器上)

我的mysql笔记

语句

insert ignore into

INSERT IGNORE 与INSERT INTO的区别就是INSERT IGNORE会忽略数据库中已经存在 的数据,如果数据库没有数据,就插入新的数据,如果有数据的话就跳过这条数据。这样就可以保留数据库中已经存在数据,达到在间隙中插入数据的目的。

insert into … on duplicate key update …

1
2
3
4
5
6
7
8
9
10
11
12
13
1.on duplicate key update 含义:
1)如果在INSERT语句末尾指定了 on duplicate key update,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则在出现重复值的行执行UPDATE;
2)如果不会导致唯一值列重复的问题,则插入新行。

2. values(col_name)函数只是取当前插入语句中的插入值,并没有累加功能。
如:count = values(count) 取前面 insert into 中的 count 值,并更新
当有多条记录冲突,需要插入时,前面的更新值都被最后一条记录覆盖,所以呈现出取最后一条更新的现象。
如:count = count + values(count) 依然取前面 insert into 中的 count 值,并与原记录值相加后更新回数据库,这样,当多条记录冲突需要插入时,就实现了不断累加更新的现象。

注:
1.insert into ... on duplicate key update ... values() 这个语句
尽管在冲突时执行了更新,并没有插入,但是发现依然会占用 id 序号(自增),
2.如果要更新的字段是主键或者唯一索引,不能和表中已有的数据重复,否则插入更新都失败。