HBase2实战:HBase Flink和Kafka整合

Apache官方发布HBase2已经有一段时间了,HBase2中包含了许多个Features,从官方JIRA来看,大约有4500+个ISSUES(查看地址),从版本上来看是一个非常大的版本了。本篇博客将为大家介绍HBase2的新特性,以及如何在实战中与Flink、Kafka等组件进行整合。

2.内容

HBase2有哪些新特性值得我们去关注,这里给大家列举部分特定。

2.1 部分新特性预览 2.1.1 Region分配优化

在HBase中遇到比较频繁的问题就是RIT问题,而在新特性中,对于Region的管理和分配有了新的调整。AssignmentManager基于ProcedureV2实现,可以快速的分配Region,另外维护Region的State存储不再依赖Zookeeper,能够更好的面对Region长时间的RIT问题。

具体参考JIRA单:[HBASE-14614]、[HBASE-17844]、[HBASE-14350]

2.1.2 Offheap优化

在HBase2中减少了对Heap内存的使用,改为Offheap内存,减少垃圾的产生,以及减少GC的停顿时间。

参考JIRA单:[HBASE-11425]

2.1.3 Compaction优化

在HBase2中,引入了MemStore新的实现类CompactingMemstore,这个类和默认的DefaultMemStore类的区别在于实现了在内存中进行Compaction。

CompactingMemstore中,数据是通过Segment作为单位进行组织的,一个MemStore中包含多个Segment。数据最开始写入时会进入到一个处理Active状态的Segment中,这个Segment是可以被修改的。当该Active状态的Segment中的数据达到阀值后,不是直接Flush到HDFS的HFile文件中,而是先Flush到内存中的一个不可修改的Segment中。CompactingMemstore会在后台将多个不可修改的Segment合并为一个更大、更紧凑的Segment。

如果RegionServer需要把MemStore中的数据Flush到磁盘,会先选择其他类型的MemStore,然后在选择CompactingMemstore。这是由于CompactingMemstore对内存的管理更加高效,所以延长CompactingMemstore的生命周期可以减少总的I/O。当CompactingMemstore被Flush到磁盘时,不可修改的Segment会被移到一个快照中进行合并,然后写入HFile。

参考JIRA单:[HBASE-15991]

2.1.4 RegionServer Group

在引入RegionServer Group之前,HBase默认使用StochasticLoadBalancer策略将表的Region移到到RegionServer里面。在HBase2中,可以将RegionServer划分到多个逻辑组中,这样可以提供多租户的能力。

参考JIRA单:[HBASE-6721]、[HBASE-16430]、[HBASE-17589]、[HBASE-17350]、[HBASE-17349]

2.1.5 Add new AsyncRpcClient

在HBase2中,客户端请求改为异步RPC机制,不再是同步Wait,这样能大大有效的提高客户端请求的并发量,有效的提高资源利用率。

参考JIRA单:[HBASE-13784]、[HBASE-12684]

3.实战整合

了解了HBase2的一些新特性之后,如何将HBase2运用到实际项目中去,下面将为大家介绍如何将HBase整合到Flink和Kafka中。数据流向如下图所示:

HBase2实战:HBase Flink和Kafka整合

 

3.1 基础环境

整合环境如下所示:

JDK1.8

HBase-2.1.1

Flink-1.7.1

Kafka-2.1.0

3.1.1 依赖JAR

整合实战项目,需要依赖的JAR信息如下:

<dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-connector-kafka-0.11_2.12</artifactId> <version>1.7.1</version> </dependency> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-streaming-java_2.12</artifactId> <version>1.7.1</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-hbase_2.12</artifactId> <version>1.7.1</version> </dependency> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-core</artifactId> <version>1.7.1</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>2.7.4</version> </dependency>

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsxgdw.html