我是靠谱客的博主 完美早晨,最近开发中收集的这篇文章主要介绍flume flume负载均衡(load balance)简介简化版load balancenode01代码node02代码node03代码,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

flume负载均衡load balance

  • 简介
  • 简化版load balance
    • 服务器规划
  • node01代码
  • node02代码
  • node03代码

简介

  • 负载均衡Sink 选择器提供了在多个sink上进行负载均衡流量的功能。 它维护一个活动sink列表的索引来实现负载的分配。

    • 默认支持了轮询(round_robin)和随机(random)两种选择机制分配负载。
    • 同样支持从AbstractSinkSelector继承写一个自定义的选择器。
  • 工作时,此选择器使用其配置的选择机制选择下一个sink并调用它。 如果所选sink无法正常工作,则处理器通过其配置的选择机制选择下一个可用sink。 此实现不会将失败的接收器列入黑名单,而是继续乐观地尝试每个可用的接收器。 如果所有sink调用都失败了,选择器会将故障抛给sink的运行器。

  • 如果backoff设置为true则启用了规避机制,失败的sink会被放入黑名单,达到一定的超时时间后会自动从黑名单移除。 如从黑名单出来后sink仍然失败,则再次进入黑名单而且超时时间会翻倍,以避免在无响应的sink上浪费过长时间。 如果没有启用规避机制,在禁用此功能的情况下,发生sink传输失败后,会将本次负载传给下一个sink继续尝试,因此这种情况下是不均衡的。

    • backoff规则如下图所示
      在这里插入图片描述

在这里插入图片描述

注意

  • flume轮训是每隔一段时间轮训,而不是每秒轮训一次。所以可能多条在同一时间间隔的events都被一个输出到一个sink端
  • 负载均衡和高可用只能二选一
  • exponential backoff是flume的一种规避算法,规避时间以2的指数倍递增。
    在这里插入图片描述

官网地址

下图所示

  • agent1作为路由节点,将channel暂存的event均衡对应到多个sink组件上
  • 每个sink组件分别连接到一个独立的agent上
  • 多个flume最终下沉到一个kafka中

在这里插入图片描述

简化版load balance

服务器规划

  • node01:采集数据,发送到node02和node03机器上去
  • node02:接收node01的部分数据
  • node03:接收node01的部分数据

node01代码

#agent name
a1.channels = c1
a1.sources = r1
a1.sinks = k1 k2

#set group
a1.sinkgroups = g1

#set channel
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100

a1.sources.r1.channels = c1
a1.sources.r1.type = exec
a1.sources.r1.command = tail -F /flume/taillogs/access_log

# set sink1
a1.sinks.k1.channel = c1
a1.sinks.k1.type = avro
a1.sinks.k1.hostname = node02
a1.sinks.k1.port = 52020
# set sink2
a1.sinks.k2.channel = c1
a1.sinks.k2.type = avro
a1.sinks.k2.hostname = node03
a1.sinks.k2.port = 52020
#set sink group
a1.sinkgroups.g1.sinks = k1 k2
#set load balance
a1.sinkgroups.g1.processor.type = load_balance
a1.sinkgroups.g1.processor.backoff = true
# 时间轮训策略
a1.sinkgroups.g1.processor.selector = round_robin
# 单位毫秒
a1.sinkgroups.g1.processor.selector.maxTimeOut=10000

node02代码

# Name the components on this agent
a1.sources = r1
a1.sinks = k1
a1.channels = c1

# Describe/configure the source
a1.sources.r1.type = avro
a1.sources.r1.channels = c1
a1.sources.r1.bind = node02
a1.sources.r1.port = 52020

# Describe the sink
a1.sinks.k1.type = logger

# Use a channel which buffers events in memory
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100

# Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

node03代码

# Name the components on this agent
a1.sources = r1
a1.sinks = k1
a1.channels = c1

# Describe/configure the source
a1.sources.r1.type = avro
a1.sources.r1.channels = c1
a1.sources.r1.bind = node03
a1.sources.r1.port = 52020

# Describe the sink
a1.sinks.k1.type = logger

# Use a channel which buffers events in memory
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100

# Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

示例

  • 先启动node02和node03(2和3先后顺序随意),后启动node01,否则报错找不到hostname
  • agent1端向指定目录发送数据
  • node02 接收到数据并打印出来
    在这里插入图片描述

最后

以上就是完美早晨为你收集整理的flume flume负载均衡(load balance)简介简化版load balancenode01代码node02代码node03代码的全部内容,希望文章能够帮你解决flume flume负载均衡(load balance)简介简化版load balancenode01代码node02代码node03代码所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部