Flume LoadBalanceSinkProcessor源码阅读记录

flume AvroSource和AvroSink使用 AvroSource Avro Source是flume主要的RPC Source,能接收其他节点的Avro Sink或者用Flume SDK发来的数据, 常与Avro Sink结合作为缓冲使用。 关于Avro,这篇文章有作介绍,链接:Avro使用详解 AvroSource配置参数 配置参数 默认值 描述 type - source类型 bind - ip地址,0.0.0.0绑... 阅读详情

简介

LoadBalanceSinkProcessor是flume实现负载均衡的重要方式,可有效的提高资源利用率,提升数据传输的速度。

配置参数

参数默认值描述
type-load_balance
selectorround_robinround_robin或random
backofffalse若为true,失败的Sink将加入黑名单,时间以指数增长
selector.maxTimeOut30000(ms)黑名单最大时间

配置示例

agent.sinks = s1 s2 s3 s4
agent.sinkgroups.group1.processor.type = failover
agent.sinkgroups.group1.processor.priority.s1 = 90
agent.sinkgroups.group1.processor.priority.s2 = 100
agent.sinkgroups.group1.processor.priority.s4 = 110
agent.sinkgroups.group1.processor.maxpenalty = 10000

LoadBalanceSinkProcessor初始化

  @Override
  public void configure(Context context) {
    Preconditions.checkState(getSinks().size() > 1,
        "The LoadBalancingSinkProcessor cannot be used for a single sink. "
        + "Please configure more than one sinks and try again.");
    //选初始化择器类型,默认为ROUND_ROBIN
    String selectorTypeName = context.getString(CONFIG_SELECTOR,
        SELECTOR_NAME_ROUND_ROBIN);
	//是否配置失败加入黑名单
    Boolean shouldBackOff = context.getBoolean(CONFIG_BACKOFF, false);

    selector = null;

    if (selectorTypeName.equalsIgnoreCase(SELECTOR_NAME_ROUND_ROBIN)) {
      selector = new RoundRobinSinkSelector(shouldBackOff);
    } else if (selectorTypeName.equalsIgnoreCase(SELECTOR_NAME_RANDOM)) {
      selector = new RandomOrderSinkSelector(shouldBackOff);
    } else {
      try {
        @SuppressWarnings("unchecked")
        Class<? extends SinkSelector> klass = (Class<? extends SinkSelector>)
            Class.forName(selectorTypeName);

        selector = klass.newInstance();
      } catch (Exception ex) {
        throw new FlumeException("Unable to instantiate sink selector: "
            + selectorTypeName, ex);
      }
    }
    //把配置的Sink列表加入到选择器中
    selector.setSinks(getSinks());
    selector.configure(
        new Context(context.getSubProperties(CONFIG_SELECTOR_PREFIX)));

    LOGGER.debug("Sink selector: " + selector + " initialized");
  }

选择器类型

1. RandomOrderSelector选择器

RandomOrderSelector,通过随机选择的方式,提供Sink名单。实现方法如下:

  @Override
  public synchronized Iterator<T> createIterator() {
    List<Integer> indexList = getIndexList();

    int size = indexList.size();
    int[] indexOrder = new int[size];

    while (indexList.size() != 1) {
      int pick = random.nextInt(indexList.size());
      indexOrder[indexList.size() - 1] = indexList.remove(pick);
    }

    indexOrder[0] = indexList.get(0);

    return new SpecificOrderIterator<T>(indexOrder, getObjects());
  }
2. RoundRobinOrderSelector选择器

RandomOrderSelector,通过顺序循环的方式,提供Sink名单。实现方法如下:

 @Override
  public Iterator<T> createIterator() {
    List<Integer> activeIndices = getIndexList();
    int size = activeIndices.size();
    // possible that the size has shrunk so gotta adjust nextHead for that
    if (nextHead >= size) {
      nextHead = 0;
    }
    int begin = nextHead++;
    if (nextHead == activeIndices.size()) {
      nextHead = 0;
    }

    int[] indexOrder = new int[size];

    for (int i = 0; i < size; i++) {
      indexOrder[i] = activeIndices.get((begin + i) % size);
    }

    return new SpecificOrderIterator<T>(indexOrder, getObjects());
  }

LoadBalanceSinkProcessor处理数据

 @Override
 public Status process() throws EventDeliveryException {
   Status status = null;
   //从选择器中获取Sink迭代器,此时的Sink处理顺序以由选择器做好
   Iterator<Sink> sinkIterator = selector.createSinkIterator();
   while (sinkIterator.hasNext()) {
     Sink sink = sinkIterator.next();
     try {
       //处理数据
       status = sink.process();
       break;
     } catch (Exception ex) {
       //处理失败,则提示处理器将其加入黑名单
       selector.informSinkFailed(sink);
       LOGGER.warn("Sink failed to consume event. "
           + "Attempting next sink if available.", ex);
     }
   }

   if (status == null) {
     throw new EventDeliveryException("All configured sinks have failed");
   }

   return status;
 }
Memory Channel源码阅读笔记 Memory Channel 使用LinkedBlockingDeque实现, 数据基于双向队列存储,可从从两端取出,插入。 主要属性: LinkedBlockingDeque queue: 存放Event Semaphore queueStored : queue中已使用空间 private volatile Integer transCapacity :一个事务中Event的最大数目 Se... 阅读详情

相关推荐

基于Q-learning的无人机三维路径规划(含完整C++代码)

基于Q-learning的无人机三维路径规划(含完整C++代码)

weixin_54186646的博客 1万+

【Flume】【源码分析】flume中LoadBalancingSinkProcessor负载均衡实现机制的源码分析

基于上一篇文章http://blog.csdn.net/simonchi/article/details/42520193 相对比较细致的分析后,该文章将对LoadBalancingSinkProcessor源码进行选择性的重要逻辑代码进行讲解 首先读取配置,当然是重写congifure方法 public void configure(Context context) { P...

三也_攻城狮 2828

深入解析π型滤波电路:RC与LC滤波器的实战选型指南

本文深入解析了π型滤波电路的工作原理与实战选型。重点对比了RC型与LC型滤波器的核心差异:RC型成本低、体积小,但存在压降与能耗,适用于小电流场景;LC型效率高、滤波性能好,但成本与体积较大,适合中到大电流及高纹波抑制需求。文章提供了基于不同应用场景的选型指南与设计要点,帮助工程师做出精准决策。

weixin_29291069的博客 654

Flume之负载均衡Load balancing Sink Processor和案例 *

Load balancing Sink Processor 负载均衡的sink processor! Load balancing Sink Processor维持了sink组中active状态的sink. 使用round_robin(轮询) 或 random(随机) 算法,来分散sink组中存活的sink之间的负载 假设当前sink组里面有三个sink, 这时候Load balancing Sink Processor 只会维护存活状态的sink,如果某个sink挂掉了就会从sink组里面去掉. 然后发

张俊杰 的博客 958

手把手教你用Wireshark国密版分析TLCP和IPSec协议(附下载地址)

本文详细介绍了Wireshark国密版在TLCP和IPSec协议分析中的实战应用,包括环境配置、协议解析、合规性检查及高级分析技巧。该工具针对商用密码算法(如SM2/SM3/SM4)进行了专项优化,支持GB/T 38636-2020 TLCP和GB/T 36968-2018 IPSec VPN等国家标准,帮助开发者与安全工程师高效完成密评分析任务。

weixin_29325955的博客 551

[ensp报错:USG6000V错误代码45解决方案]

[ensp报错:USG6000V:错误代码45解决] [ensp报错:USG6000V:错误代码45解决] 第一种处理方式: ensp的45错误帮助文档里的解决方法:(这里就不说了,上华为爸爸的图) ensp的45错误:如果你的45错误不是描述的那个,可能是ensp与virtualbox不兼容了。 错误描述:具体表现为在virtualbox里没有vfw_usg的条目,虚拟介质管理器里也没有相应的条目: 就是vfw_usg_vdi这个 这种情况下你把ensp卸载重装多少次都没用,原因在两个软件的兼容

weixin_45456536的博客 3万+

flume源码学习7-SinkProcessor相关类

org.apache.flume.SinkProcessor 扩展了LifecycleAware, Configurable接口的接口类,操作多个sink的抽象层(类似于proxy),用来分配给SinkRunner对象抽象方法:process 和Sink 的process方法类似(内部实现增加了选择Sink的功能)setSinks 设置sinks具体实现类:org.apach...

weixin_34270606的博客 202

【SpringCloud】5、Spring Cloud Gateway网关路由规则

Spring Cloud Gateway 创建 Route 对象时, 使用 RoutePredicateFactory 创建 Predicate 对象,Predicate 对象可以赋值给 Route。

JACKAL 3万+

第1节 flume:12、flume的load_balance实现机制

1.5、flume的负载均衡load balancer 负载均衡是用于解决一台机器(一个进程)无法解决所有请求而产生的一种算法。Load balancing Sink Processor 能够实现 load balance 功能,如下图Agent1 是一个路由节点,负责将 Channel 暂存的 Event 均衡到对应的多个 Sink组件上,而每个 Sink 组件分别连接到一个独立的 ...

dengmanzhou3124的博客 266

教你写出高质量SQL(实践必备)

1、查询SQL尽量不要使用select * ,而是select具体字段。 //反例子 select * from sys_user; //正例子 select id,name from sys_user; 理由: 只取需要的字段,节省资源、减少网络开销;select * 进行查询时,很可能就不会使用到覆盖索引,就会造成回表查询; 覆盖索引:只需要在一棵索引树上就能获取SQL所需的所有列数据,无需回表,速度更快。 例如: 回表查询:先通过普通索引的值定位聚簇索引值,再通过聚簇索引的值定位行记..

ANGEL CITY 9996

YOLO11改进|注意力机制篇|引入先验卷积注意力机制CPCA

YOLO11中添加先验卷积注意力机制CAPA

A1983Z的博客 2374

flume接收kafka消息过多导致的GC错误的解决办法

当flume接收kafka消息过多会导致如下错误: Exception in thread "PollableSourceRunner-KafkaSource-s1" java.lang.OutOfMemoryError: GC overhead limit exceeded at java.lang.StringCoding$StringDecoder.decode(StringCodin...

sxj的专栏 2908

社交媒体文章内容与评论抓取:Python 爬虫实战教程

通过本文的介绍,我们学习了如何使用 Python 编写爬虫,抓取社交媒体平台的文章内容和评论。我们详细介绍了如何使用requestsSelenium和Tweepy等工具,抓取微博和 Twitter 上的公开数据。同时,我们还讨论了如何处理反爬虫机制,避免账号或 IP 被封禁。抓取社交媒体数据是一个充满挑战和乐趣的过程,掌握这些技术后,你可以在大数据分析、情感分析和舆情监测等方面得到更深层次的应用。

2201_76125261的博客 1710

【Flume】【源码分析】深入flume-ng的三大组件——source,channel,sink

概览 flume-ng中最重要的核心三大组件就是source,channel,sink source负责从源端收集数据 channel负责暂存收集来的数据,以备下游取走消费 sink负责消费通道中的数据,写到最终的输出端上 以上是总体的一个简单结构图,下面我们来深入每一个组件的内部看看: 1、Source source接口的定义如下: @Inte

三也_攻城狮 1万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

flume源码分析-SinkProcessor

flume包括三种sink processor,DefaultSinkProcessor,FailoverSinkProcessor,LoadBalancingSinkProcessor   Default sink processor that only accepts a single sink, passing on process results without any additi...

fannk的博客 521

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Flume案例八:负载均衡(Load balancing Sink Processor)

Flume案例八:负载均衡(Load balancing Sink Processor) 选型:  Flume-1:taildir source + memory channel + avro sink + Load balancing Sink Processor(负载均衡)  Flume-2:avro source + memory channel + logger sink  Flume-3:avro source + memory channel + logger sink

扛麻袋的少年的博客 696

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Flume的可靠性保证:故障转移、负载均衡

Flume的一些组件(如Spooling Directory Source、File Channel)能够保证agent挂掉后不丢失数据。1、负载均衡1)Load balancing Sink Processorsource里的event流经channel,进入sink组,在sink组内部根据负载算法(round_robin、random)选择sink,后续可以选择不同机器上的agent实现负载均衡

辉哥大数据 1万+

flume Channel选择器

简介 channel处理器用于决定source接收的时间写入哪个channel,由其通知channel,并将时间写入。 选择器类型 flume自带两种选择器: 1.relicating(复制选择器),默认使用 2.multiplexing(多路复用选择器) 1.复制选择器 复制选择器会复制每个source接收的事件,将事件复制并分发到所有channel,可通过配置参数,控制分发的channel。 ...

SW_LCC的博客 2724

flume常见报错记录

1.java.nio.channels.ClosedChannelException Unexpected exception from downstream 一般来说,这种错误是source往channel写入数据时错误才有的异常,因此只需根据实际情况去处理就行。但有另一种错误,我们配置zabbix监控flume端口时,会每隔固定时间往source端口建立一个tcp连接但并没有发送具体数据。查看...

SW_LCC的博客 2317

flume HttpSource使用

HttpSource httpsource允许是flume提供的能接收get和post的http请求,http请求会被HttpHandler接口实现类处理,从而将http请求转换为event从而提交到channel。 http适用于一些无法通过部署SDK接收日志的场景,例如游戏客户端。 HttpSource配置使用 HttpSource基本配置参数 配置参数 默认值 描述 type...

SW_LCC的博客 1071

Flume源码阅读记录(1)flume介绍

Flume简介 Flume 是 Cloudera 提供的日志收集系统, 使用java语言编写,具有分布式、 高可靠、高可用性等特点, 适用于大数据的数据收集,聚合转换和传输。 Flume 支持在组件式配置,用户可以根据不同的应用场景部署各个组件。组件可以使用官方提供的,也可以使用用户自己二次开发的。 Flume架构 Flume的核心为Agent,每个Agent是一套完成的数据传输工具,完成数据的接...

SW_LCC的博客 612

Flume源码阅读记录(3)flume启动组件Application代码分析

public class Application { private static final Logger logger = LoggerFactory .getLogger(Application.class); public static final String CONF_MONITOR_CLASS = "flume.monitoring.type"; pub...

SW_LCC的博客 384

Flume源码阅读记录(2)flume启动过程

flume-ng 启动 当flume配置好后,使用 bin/flume-ng agent -n agent -c conf -f conf/flume-demo.conf -Dflume.root.logger=INFO,console ,即可利用flume-ng脚本以及传入的各参数启动flume服务。 flume-ng脚本 在这里注意,FLUME_AGENT_CLASS=“org.apache...

SW_LCC的博客 309

SparkStreaming发送log4j日志到Flume配置

如果要将SparkStreaming产生的系统日志发送给Flume 则要在log4j.properties中添加如下配置: log4j.rootLogger=INFO,flume log4j.appender.flume=org.apache.flume.clients.log4jappender.Log4jAppender log4j.appender.flume.Hostname=192.16...

SW_LCC的博客 291

flume知识点归纳

SW_LCC的博客 274

Flume FailedSinkProcessor源码解析

简介 FailoverSinkProcessor是Sink组的处理器,其工作机制是通过优先级的方式选择Sink进行数据发送,最高级的Sink会持续写数据的优先权,直到其执行失败,被加入失败队列待经常最大失败回退时间恢复后重新执行。 配置参数 参数 默认值 描述 type - failover priority - sink优先级 maxpenalty 30000(ms) 失...

SW_LCC的博客 251
上一篇: Flume FailedSinkProcessor源码解析
下一篇: 《TCP/IP详解》笔记第一章 概述
SW_LCC
博客等级 码龄11年 4粉丝 114原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值