设为首页 收藏本站
查看: 2063|回复: 0

[经验分享] scribe使用BufferStore

[复制链接]

尚未签到

发表于 2017-5-23 14:17:46 | 显示全部楼层 |阅读模式
一. BufferStore

BufferStore,它包含两个Store, 笔者这里primaryStore是hdfsFileStore,secondaryStore是stdFileStore。

整个BufferStore工作的时候是一个有限状态自动机,有以下几个状态:
DISCONNECTED, SENDING_BUFFER, STREAMING,  
三个状态的含义是主store挂球, 主store恢复并从次store 恢复数据,主store正常工作

有两种事件会可能改变状态
1. handleMessage
     if(STREAMING) primaryStore->handleMessage, if fail ,从STREAMING跳到DISCONNECT
     if(!STREAMING), secondaryStore->handleMessage(这时候出问题数据丢失)

2. periodCheck(定期检查)
     if(DISCONNECTED && ts-lastTs>period) primaryStore->open, if success&&replayBuffer 从STREAMING跳到SENDING_BUFFER, if success&&!replayBuffer,从STREAMING跳到STREAMING, if !success,保持DISCONNECTED

     if(SENDING_BUFFER), 将secondaryStore积累的消息flush到primaryStore,如果成功了跳到STREAMING, 如果失败或者报异常跳到DISCONNECTED

changeStore做的事情, 如果前状态是STREAMING, secondaryStore->open
如果后状态是DISCONNECTED, 增加retrytimes,重新设置retryinterval, 如果secondaryStore没open, open

如果后状态是STREAMING, sencondaryStore->close

如果后状态是SENDING_BUFFER, try secondaryStore->open if not

二. 与hadoop-1.0.4工作时候的问题
     HdfsFile.cpp 在创建hdfsFileSystem时候使用的是hdfsConnectNewInstance,对每次创建返回一个new的对象,但是hadoop-1.0.4的libhdfs 中没有这个接口 DSC0000.gif DSC0001.gif ,所以笔者先将其改为hdfsConnect, 但是这样会出现一个问题, 这个connect返回的是一个全局的singleton, 这样第一个categoryA的消息来了建立一次,正常工作,第二个categoryB来了再调用一次,正常工作,但是再来一次第一个categoryA的消息时,其HdfsFile对象的fileSys已经没有了hdfsfilesystem的句柄了(假装自己是c++大牛, 其实就是不work了,不知道是不是它的句柄被释放了),这样问题就来了,处在STREAMING状态,但是写不进去东西,这样就会跳到DISCONNECTED,这样两个category的消息交错进入scribed,两个category的自动机就会不停的跳状态,然后交错使用primary 和 secondary两个store,然后还要将secondary 的数据buffer进primary,这样其实是个不正常的状态
     限于笔者屎一般的c++能力,笔者将HdfsFile的fileSys做成了这个类的静态成员变量,所有category的primaryStore 的HdfsFile对象都共用一个hdfsFileSystem,就不贴代码了,
     笔者觉得正经的做法是在libhdfs里面仿照  hadoop-0.21添加一个hdfsConnectNewInsance的接口重新生成一个库,供Scribed调用,不过如前文所说限于笔者屎一般的c++能力,还是交给大牛去做吧

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-379751-1-1.html 上篇帖子: (转)scribe 安装过程 下篇帖子: (转)scribe java客户端 例子
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表