实现声明的Cloud Bigtable会写入QPS

时间:2016-01-21 15:09:33

标签: google-cloud-bigtable

我们已经设置了具有5个节点的Bigtable集群,GCP控制台声明它应该支持50K QPS @ 6ms进行读写。

我们正在尝试加载大型数据集(~800M记录),其中包含大约50个字段,其中包含大部分数字数据和一些短字符串。键是11位数字字符串。

当从GCE中的单个客户端VM通过HBase API加载此数据集时,我们在将每个字段放入单独的列时观察到高达4K QPS。我们使用单个HBase连接,多个线程(5-30)进行10K记录的批量放置。

当将所有字段组合成单个列(Avro编码,每个记录约250个字节)时,批量放置的写入性能提高到10K QPS。并发线程数似乎不会影响QPS。当每个线程使用单独的HBase连接时,写入性能会增加到5K线程的20K QPS。

客户端虚拟机与Bigtable集群位于同一可用区域,并且在负载期间几乎保持空闲状态,因此它看起来不像客户端的瓶颈。

问题:

  1. 从我们的测试中可以看出,写入QPS会随着插入的列数而减少。这是预期的,这种关系如何量化? (顺便说一句,如果Bigtable performance documentation中提到这个问题,它会很棒。)
  2. 为了实现声明的写入QPS,我们可能缺少什么?我的理解是每个集群节点应该支持10K写入QPS,但是看起来我们是针对具有单个HBase连接的单个节点,而是针对具有多个HBase连接的2个节点。

2 个答案:

答案 0 :(得分:1)

回答第二个问题:通过从批量HBase Puts切换到mutators,我们设法达到了50K以上的QPS。我们仍在使用多个HBase连接,单个连接似乎仅限于单节点吞吐量。

答案 1 :(得分:1)

带有OpenSSL和Java8的0.2.3-SNAPSHOT中的

BufferedMutator在4台CPU机器上为小(1KB)突变提供22-23K QPS,在32 CPU机器上提供高达90K的QPS。 0.2.2给出10K-12K QPS。打开单个HBase连接以获得最佳性能。

注意 - 删除了有关OpenSSL的说明,因为它现在是默认

有关其他信息,请参阅https://github.com/GoogleCloudPlatform/cloud-bigtable-client