Flume(二十四)Sink Processor

Sink Processor是将一个或者多个Sink绑定到一个组中,针对一个组中的Sink来进行整体的操作。

Sink Processor本质上就是Sink Group,是将一个或者多个Sink绑定到一个组中来使用,是Flume用于实现失败恢复和负载均衡的组件。

在企业级开发中,通常有多个客户端Agent来收集数据,发送给中心服务器Agent,中心服务器Agent要承载若干客户端Agent发送的数据,负载较高,且中心服务器Agent如果只有一个,会造成单节点故障风险。
所以在企业级开发中,中心服务器Agent往往不止一个,由若干个协同工作,此时客户端Agent如何分配数据给中心服务器Agent就成了问题。
需要为多个中心服务器配置Sink,将这些Sink组成SinkGroup组,再为这个组配置Processor,指定处理机制和其他参数。
之后将这些Sink连接到同一个Channel,Processor可以通过改变Channel的指向,将数据根据规则实现分发
 

目前官网支持三种模式:
default:默认模式
该模式下,一个Sink就是一个Sink组,有几个Sink就对应了几个Sink组。

failover:崩溃恢复模式(优先级)
该模式下,要求将多个Sink绑定到一个组中,给这个组中的每一个Sink指定优先级,数据优先发送给高优先级的Sink;如果高优先级的Sink宕机,那么才会发送给低优先级的Sink。

load_balancing:负载均衡模式
该模式同样要求将多个Sink绑定到一个组中,数据在组中进行均衡。Flume提供了两种均衡方式:round_robin和random。同样需要注意的是,Flume原生提供的load_balancing模式同样不好用!

失败恢复机制下,Processor将会维护一个sink的优先表。sink可以被配置一个优先级,数字越大优先级越高。
事件将永远将只会发往优先级最高的Sink。只要有一个Sink存活,整个过程仍然可以进行。
如果没有指定优先级,则优先级顺序取决于sink的配置顺序,先配置的默认优先级高于后配置的.

SinkProcessor共 有 三 种 类 型 , 分 别 是DefaultSinkProcessor 、LoadBalancingSinkProcessor 和 FailoverSinkProcessor。DefaultSinkProcessor 对 应 的 是 单 个 的 Sink , LoadBalancingSinkProcessor 和FailoverSinkProcessor 对应的是 Sink Group,LoadBalancingSinkProcessor 可以实现负载均衡的功能,FailoverSinkProcessor 可以实现故障转移的功能。

a要通过b节点往c节点发送数据,为了稳定性,再设置一个b1节点与b节点形成group组,b,和b1设置优先级,数据流向优先级高的节点,如果一个组里的节点挂掉,数据将流向另一个节点

举例收集指定端口的数据,实现两个sink通道的负载平衡,通过轮询发送数据,如下图

如下图

Sink Processor共有三种类型

FailoverSinkProcessor可以实现故障转移

将多个Sink绑定到一个组中,同组的Sink需要配置优先级,数据会优先发送给优先级较高的Sink,如果高优先级的Sink宕机,那么才会发送给低优先级的Sink。当优先级高的Sink恢复后,那么数据又会重新回来

需求:flume1采集端口数据,发送给flume2或flume3。当flume2或3挂掉后,发送给另一台flume。

flume1配置:NetCat Source -> Memory Channel -> Avro Sink

# 给三大组件取名
a1.sources = r1
a1.sinks = k1 k2
a1.channels = c1

#配置 NetCat Source
a1.sources.r1.type = netcat
a1.sources.r1.bind = m1
a1.sources.r1.port = 9999

# 配置 Memory Channel
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100

# 配置 Avro Sink
a1.sinks.k1.type = avro
a1.sinks.k1.hostname = m2
a1.sinks.k1.port = 9999

a1.sinks.k2.type = avro
a1.sinks.k2.hostname = hadoop102
a1.sinks.k2.port = 9999

# 配置 sink groups
a1.sinkgroups = g1
a1.sinkgroups.g1.sinks = k1 k2
a1.sinkgroups.g1.processor.type = failover
a1.sinkgroups.g1.processor.priority.k1 = 5
a1.sinkgroups.g1.processor.priority.k2 = 10
# 最大退避时间(期间不重试)
a1.sinkgroups.g1.processor.maxpenalty = 10000

# 配置三大组件的绑定关系
a1.sources.r1.channels = c1
# c1的数据发给k1或k2
a1.sinks.k1.channel = c1
a1.sinks.k2.channel = c1

flume2配置:Avro Source -> Memory Channel -> Logger Sink

# 给三大组件取名
a2.sources = r1
a2.channels = c1
a2.sinks = k1

# 配置 Avro Source
a2.sources.r1.type = avro
a2.sources.r1.bind = m2
a2.sources.r1.port = 9999

# 配置 Memory Channel
a2.channels.c1.type = memory
a2.channels.c1.capacity = 1000
a2.channels.c1.transactionCapacity = 100

# 配置 Logger Sink
a2.sinks.k1.type = logger

# 配置三大组件的绑定关系
a2.sources.r1.channels = c1
a2.sinks.k1.channel = c1

flume3配置:Avro Source -> Memory Channel -> Logger Sink

# 给三大组件取名
a3.sources = r1
a3.channels = c1
a3.sinks = k1

# 配置 Avro Source
a3.sources.r1.type = avro
a3.sources.r1.bind = hadoop102
a3.sources.r1.port = 4142

# 配置 Memory Channel
a3.channels.c1.type = memory
a3.channels.c1.capacity = 1000
a3.channels.c1.transactionCapacity = 100

# 配置 Logger Sink
a3.sinks.k1.type = logger

# 配置三大组件的绑定关系
a3.sources.r1.channels = c1
a3.sinks.k1.channel = c1

測試

依次启动m2,m3,m1

flume-ng agent -c $FLUME_HOME/conf -n a1  -f $FLUME_HOME/sinkprocessor.conf  -Dflume.root.logger=INFO,console

发送数据

nc m1 9999  数据abc

因为在m1的配置中k2,即m3的优先级高,所以abc数据是发到m3上的

此时关掉m3,发送数据hello,数据将发送到m2上

再次启动m3,发送数据success,数据将重新发送到优先级高的m3上

LoadBalancingSinkProcessor 实现负载均衡

 与FailoverSinkProcessor 的配置极为类似,只需在flume1中将sink组的配置改为

# sink group 负载均衡
a1.sinkgroups = g1
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

  • 13
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Flume中使用Kafka作为Sink的步骤如下: 1. 安装Kafka:首先需要安装Kafka,可以从官网上下载最新版本:https://kafka.apache.org/downloads 2. 配置Kafka:配置Kafka的端口号、主题名称、副本数等参数。在config/server.properties文件中进行配置。 3. 在Flume中添加Kafka Sink:在Flume配置文件中添加一个Kafka Sink,并配置它与Kafka的连接信息和主题等。 4. 启动Kafka和Flume:启动Kafka和Flume。 以下是一个示例Flume配置文件,使用Kafka作为Sink: ``` # Name the components on this agent agent.sources = source agent.sinks = kafkaSink agent.channels = memoryChannel # Describe/configure the source agent.sources.source.type = netcat agent.sources.source.bind = localhost agent.sources.source.port = 44444 # Describe the sink agent.sinks.kafkaSink.type = org.apache.flume.sink.kafka.KafkaSink agent.sinks.kafkaSink.brokerList = localhost:9092 agent.sinks.kafkaSink.topic = myTopic agent.sinks.kafkaSink.serializer.class = kafka.serializer.StringEncoder # Use a channel which buffers events in memory agent.channels.memoryChannel.type = memory agent.channels.memoryChannel.capacity = 1000 # Bind the source and sink to the channel agent.sources.source.channels = memoryChannel agent.sinks.kafkaSink.channel = memoryChannel ``` 在这个配置中,使用netcat作为源,监听本地的44444端口。在Kafka Sink中,配置连接信息和主题名称等参数。同时也使用了一个内存中间件,用于缓存事件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值