您现在的位置是:首页 > 文章详情
HBase中Disruptor使用
日期:2016-03-18点击:690收藏
// 核心是一个循环缓冲区。我们的循环缓冲区是一个LMAX Disruptor。当多个线程在单个WAL竞争append和sync时,它试图最小化同步与volatile写。 // Disruptor配置为处理多个生产者和仅有一个消费者(HBase中的生产者是调用append、sync的IPC Handlers)。单一的消费者从环形缓冲区中 // 拉去append和sync。
/**
* RingBufferTruck为事件--Event
* RingBufferTruck.EVENT_FACTORY为事件工厂--EventFactory
* preallocatedEventCount为RingBuffer大小,必须是2的N次方,默认为1024*16
* appendExecutor为事件处理的线程池--newSingleThreadExecutor
* ProducerType.MULTI为生产者类型,意思为多个生产者
* BlockingWaitStrategy为指定的等待策略
*/
this.disruptor =
new Disruptor<RingBufferTruck>(RingBufferTruck.EVENT_FACTORY, preallocatedEventCount,
this.appendExecutor, ProducerType.MULTI, new BlockingWaitStrategy());
// Advance the ring buffer sequence so that it starts from 1 instead of 0,
// because SyncFuture.NOT_DONE = 0.
// 请求下一个事件序号
// 让ring buffer sequence从1开始,而不是从0开始
this.disruptor.getRingBuffer().next();
// 构造事件处理器实例
this.ringBufferEventHandler =
new RingBufferEventHandler(conf.getInt("hbase.regionserver.hlog.syncer.count", 5),
maxHandlersCount);
// 添加异常处理器
this.disruptor.handleExceptionsWith(new RingBufferExceptionHandler());
// 添加事件处理器
this.disruptor.handleEventsWith(new RingBufferEventHandler [] {this.ringBufferEventHandler});
// Presize our map of SyncFutures by handler objects.
this.syncFuturesByHandler = new ConcurrentHashMap<Thread, SyncFuture>(maxHandlersCount);
// Starting up threads in constructor is a no no; Interface should have an init call.
// 启动disruptor
this.disruptor.start();
关注公众号
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
MYSQL Space id in fsp header,but in the page header错误
今天启动MYSQL的时候发现如下问题: 2015-12-14 20:51:59 2098 [ERROR] InnoDB: Space id in fsp header 131225,but in the page header 65 2015-12-14 20:51:59 2098 [ERROR] InnoDB: inconsistent data in space header in tablespace ./test/oneblock.ibd (table test/oneblock) innodb的存储包含 tablespace--segment--extent--block(pages) 而tablespace有一个space id 及用于描述表空间的唯一编号,ibdata的space id为0,这个ibdata为, SYSTEM SPACE,其中会包含很多普通SPACE_ID 不包含的数据段,或者说数据块,如回滚段。 如果开启了innodb_file_per_table,每个innodb 表文件都有space id,其中文件包含了表的数据和索引数据。 而普通的space 包含...
-
下一篇
HBase源码分析之Region上Spilt流程
HBase源码分析之Region上Spilt流程,近期推出!
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
扫描即可查看该文章
点击排行
推荐阅读
最新文章
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Dcoker安装(在线仓库),最新的服务器搭配容器使用
- CentOS8编译安装MySQL8.0.19
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Hadoop3单机部署,实现最简伪集群
- CentOS7,CentOS8安装Elasticsearch6.8.6
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作

微信收款码
支付宝收款码