关于flume的filechannel的 full 问题
事务启动以后,批量向事务Transaction的一个putList的尾部写入,putlist是一个LinkedBlockingDeque .
事务提交的时候, 把putlist中的event批量移除, 转移到Channel的一个LinkedBlockingDeque 里面来.
而SinkRunner则启动PollingRunner , 也通过定时启动任务,调用SinkProcessor,最后调用Sink的process方法,这个方法也负责启动一个事务 ,批量从Channel的LinkedBlockingDeque中拉取event , 写入takelist ,批量做完的put操作以后,做Transaction的事务提交操作
flume在一个事务中有putlist 和 takelist,而他们俩的类型都是LinkedBlockingDeque类型,而TransactionCapacity控制的就是这个双端队列的长度
一一一一一一一一一一一一一一一一一一一一一一一一一
而上诉问题的产生是因为我观察到一次性有非常大大大量的event的在一瞬间产生了(因为用的是httpsource,可能是网络延迟balabala什么的原因,大家可能很难遇见我这种情况)然后紧随而来出现了这个问题!
so!那么很明显了,是因为putList的容量不足直接被塞满了!
那么控制putlist的是TransactionCapacity,
so,我将TransactionCapacity调整为了50000(目前还在观察中)
但这种并不能完美的解决问题,因为你保不准下次一次性来的event大小会不会超过这个值!无限增加也是个愚蠢的举动,所以将sink改为多线程消费才是明智之举,这才是最根本的解决之道,提高下游的处理能力,例如换成strom
最新文章
- [Kerberos] Kerberos 认证过程整理
- Dictionary<;k,v>;键值对的使用
- Play Framework介绍:控制器层
- python黑帽子源码
- Linux安装Flash player
- MAC OSX 下安装Cscope
- 强制不使用“兼容性视图”的HTML代码(转)
- JS判断字符串是否为空、过滤空格、查找字符串位置等函数集
- MVC 包命名规范
- C# 运行时序列化
- 从Linux启动过程到android启动过程
- hdu 5382 GCD?LCM! - 莫比乌斯反演
- [转载]Juicer – 一个Javascript模板引擎的实现和优化
- [转]IOS下如何判断机器是否越狱
- 《Python》 文件操作
- 1864. [ZJOI2006]三色二叉树【树形DP】
- RedisClient的安装及基本使用
- Knowledge Point 20180308 拔下forEach的外衣
- 3个IO口8个按键
- JAVA判断一个字符串里面有没有汉字