2、Flume架构模式
2019-04-17 本文已影响0人
ltjxwxz
一、高可用
1、原理
1.1、多台Flume部署都在多个数据源机器上,最后汇聚到同一台Flume上,对这个单点汇聚层做高可用。
1.2、一般不会对叶子节点做高可用,这样会无穷无尽。
2、架构图如下:

3、核心
配置sinkgroups,指定处理器为failover,指定优先级
4、配置文件
4.1、Agent1,Agent2,Agent3根据实际情况配置,这里只写一种
a1.sources = r1
#配置两个sink
a1.sinks = k1 k2
a1.channels = c1
a1.sources.r1.type = netcat
a1.sources.r1.bind = node02
a1.sources.r1.port = 44444
#定义sink组
a1.sinkgroups = g1
#组中有哪些sink
a1.sinkgroups.g1.sinks = k1 k2
#处理器采用故障转移方式处理
a1.sinkgroups.g1.processor.type = failover
#设置k1和k2的优先级,值越大,优先级越高
a1.sinkgroups.g1.processor.priority.k1 = 5
a1.sinkgroups.g1.processor.priority.k2 = 10
#配置两个sink详情
a1.sinks.k1.type = avro
a1.sinks.k1.hostname = node03
a1.sinks.k1.port = 8888
a1.sinks.k2.type = avro
a1.sinks.k2.hostname = node03
a1.sinks.k2.port = 9999
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
a1.sources.r1.channels = c1
#两个sink都从channel中获取数据
a1.sinks.k1.channel = c1
a1.sinks.k2.channel = c1
4.2、做高可用的两个flume
a1.sources = r1
a1.sinks = k1
a1.channels = c1
a1.sources.r1.type = avro
a1.sources.r1.bind = node03
a1.sources.r1.port = 8888
a1.sinks.k1.type = logger
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
二、一个Agent对应多个sink
1、使用场景
收集的数据需要同时做离线分析和实时分析,离线部分写入HDFS,实时部分写入Kafka
2、架构图

3、配置文件
3.1、
3.2、
三、负载均衡
1、使用场景
多服务器接收数据太多时,实现多服务器并发处理数据。
2、负载方式
2.1、轮询(round_robin):内部算法轮询
2.2、随机(random)
3、架构图

4、原理
和负载均衡类似,sinkgroups处理器类型改为负载均衡,也有两台sink的flume
5、配置
a1.sources = r1
#配置两个sink
a1.sinks = k1 k2
a1.channels = c1
a1.sources.r1.type = netcat
a1.sources.r1.bind = node02
a1.sources.r1.port = 44444
#定义sink组
a1.sinkgroups = g1
#组中有哪些sink
a1.sinkgroups.g1.sinks = k1 k2
#处理器采用负载均衡方式
a1.sinkgroups.g1.processor.type = load_balance
a1.sinkgroups.g1.processor.backoff = true
a1.sinkgroups.g1.processor.selector = random
#配置两个sink详情
a1.sinks.k1.type = avro
a1.sinks.k1.hostname = node03
a1.sinks.k1.port = 8888
a1.sinks.k2.type = avro
a1.sinks.k2.hostname = node03
a1.sinks.k2.port = 9999
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
a1.sources.r1.channels = c1
#两个sink都从channel中获取数据
a1.sinks.k1.channel = c1
a1.sinks.k2.channel = c1