作者介紹:肖贊,貝殼找房(北京)科技有限公司 OLAP 平臺負責人,基礎研發(fā)線大數(shù)據(jù)平臺部架構師。
貝殼找房是中國最大的居住服務平臺。作為居住產(chǎn)業(yè)數(shù)字化服務平臺,貝殼致力于推進居住服務的產(chǎn)業(yè)數(shù)字化、智能化進程,通過聚合、助力優(yōu)質(zhì)服務者,為中國家庭提供包括二手房交易、新房交易、租賃、家裝、家居、家服等一站式、高品質(zhì)、高效率服務。
前幾天,我們在《貝殼降本提效實踐:基于 OceanBase 的實時字典服務》中,介紹了實時字典服務的應用場景,在上線 OceanBase 后,貝殼獲得了更高的查詢性能和穩(wěn)定性。今天為大家介紹 OceanBase 在貝殼的第二個應用場景——實時維表服務,通過替代原有的?HBase 維表服務,讓貝殼的性能提升了?3-4?倍,硬件成本節(jié)省了一半,與此同時,運維成本獲得了極大降低。
在典型的實時數(shù)倉或?qū)崟r業(yè)務場景里,F(xiàn)link 實時流處理過程中,經(jīng)常需要將事實表與外部維度表進行關聯(lián),查詢維度表,補全事實表中的信息。例如,在貝殼家居等業(yè)務場景中,需要在用戶下單后將訂單信息與維度表中商品信息的相關信息進行實時關聯(lián)。考慮到維表數(shù)據(jù)量較大,并且 Flink 實時查詢 QPS 較高,傳統(tǒng)數(shù)據(jù)庫? MySQL 等難以支撐,因此,貝殼采用 HBase 作為維表。HBase 是一個分布式列存儲 NoSQL 數(shù)據(jù)庫,具有較好地查詢性能,但是也存在一些痛點。
痛點 1:HBase 不支持二級索引
在許多應用場景中,F(xiàn)link 任務關聯(lián)維度表時,除了需要基于主鍵字段進行關聯(lián)外,還需要其他非主鍵字段進行關聯(lián)。但是,HBase 只支持行鍵(Row Key)作為單一索引,本身并不直接支持二級索引。Apache Phoenix 等項目對 HBase 的基礎上進行擴展,能夠?qū)崿F(xiàn)類似于二級索引的功能,但是需要更多的開發(fā)和維護成本。
痛點 2:HBase 依賴較多,部署復雜,成本高
HBase 是構建在 Hadoop 生態(tài)系統(tǒng)之上的,它依賴于分布式文件系統(tǒng) HDFS 用于數(shù)據(jù)的持久化存儲,依賴 ZooKeeper 來完成選舉、節(jié)點管理、集群元數(shù)據(jù)維護等,因此,在生產(chǎn)環(huán)境中部署 HBase 之前,需要先部署和配置 Hadoop、ZooKeeper 等組件,涉及組件多,部署較復雜,運維成本較高,硬件成本也較高,特別是在一些特殊場景下需要分別為其部署獨立的 HBase 集群。?
基于上述背景,貝殼將目光投向分布式數(shù)據(jù)庫,并鎖定具備高性能、高可靠性和可擴展性的 OceanBase。同時,OceanBase 能夠很好地解決貝殼業(yè)務痛點。
首先,OceanBase 原生支持二級索引功能,可以直接在維表上創(chuàng)建額外的索引,提升維表的查詢性能。其次,OceanBase 只有 OBServer 一個角色,不依賴任何外部組件,天然具備高可用能力,部署非常簡單。同時,其自帶的周邊工具也可以快速安裝,比如通過 OCP(OceanBase Cloud Platform)白屏化安裝或通過 OBD(OceanBase Deployer)命令行安裝集群,運維很方便。
在部署資源消耗方面,HBase 方案機器成本大概是 OceanBase 的 2 倍。因為 HBase 為了保證高可用, 采用了雙 HRegionServer,而 HBase 又是基于三副本的 Hadoop 存儲數(shù)據(jù), 所以,一份數(shù)據(jù)通常需要六副本。在集群規(guī)模不大時,使用 Zookeeper、Hadoop 會帶來大量額外的機器冗余。但是,使用 OceanBase 存儲數(shù)據(jù)只需要三副本,成本降低一半。
因此,貝殼決定在實時計算平臺中引入 OceanBase 作為實時維表存儲,在此之前,對 OceanBase 和 HBase 在實時維表 1 對 N 關聯(lián)和維表 1 對 N 關聯(lián)場景進行了全面的性能測試對比。
第一,環(huán)境準備
OceanBase 和 HBase 測試集群均采用 3 臺 Dell EMC PowerEdge R740 服務器節(jié)點組成,節(jié)點配置規(guī)格為:80C/188G/2.9T Nvme SSD,所有的測試任務均運行在同一個 Hadoop 實時集群。HBase 版本為 1.4.9,HBase 集群由 HBase DBA 協(xié)助部署和配置,OceanBase 版本為 3.1.2,使用默認配置。
第二,測試方案
首先,為驗證維表數(shù)據(jù)量對于查詢性能影響,分別準備了 1 億、2000 萬、10 萬的隨機測試數(shù)據(jù)插入 OceanBase 及 HBase,其中主鍵(HBase為 rowKey)為從 1 至測試數(shù)據(jù)量的順序值,OceanBase 建表 DDL 及樣例數(shù)據(jù)如下:
show create table tb_dim_benchmark_range_partitioned;
create table `tb_dim_benchmark_range_partitioned`
(
t1 bigint(20) NOT NULL,
t2 varchar(200) DEFAULT NULL,
……
t30 varchar(200) DEFAULT NULL,
)
PRIMARY KEY (`t1`)
) DEFAULT CHARSET = utf8mb4
ROW_FORMAT = COMPACT
COMPRESSION = 'zstd_1.3.8' REPLICA_NUM = 3 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE =
134217728 PCTFREE = 0
partition by range(t1)
(partition PT1 values less than (10000000),
partition PT2 values less than (20000000),
partition PT3 values less than (30000000),
partition PT4 values less than (40000000),
partition PT5 values less than (50000000),
partition PT6 values less than (60000000),
partition PT7 values less than (70000000),
partition PT8 values less than (80000000),
partition PT9 values less than (90000000),
partition PT10 values less than (100000000));
select * from tb_dim_benchmark_range_partitioned limit 1;
# 10000000,c5181f1335efd950960f41cbecb1ab0ed97c43502252b99834f4b6905ea7f7490ca72e1d676bbe9b77016d23e52ada249f2c,
2b5480769a360133d57f09cba16d1c449cc06b42b614bcfa3f9db6bbf7a04bac2be1d373d11c63a77676daf53111c2321b32,
db88f926925d87175aa4be6740f6f2f49d8f8b38f0d0efff2e5e832f3c1aec21e06cc4f2f0b5053e0b9fbab8a16cce80b9ff,
9c0b94cdde25b68264704c890d141444d28544a7ce4955856b3115f913442ec4bc741f033477e366005c927e41842a7cd9be,
4d69eedaae9e42b4ab7388e66992efddfa39cbb6802cf69b97c5892070a68e6eed51f823770587771a49cbbd1b7be1f2e024,
c60b30f6c4e1b3c02d6fb2de58badf8097f782a8534e0c9dc78497ede12b2573e2d9441e0596f37739d26f0830918fb03ff5,
a8a01cbe3bd44e6d52b7e83bd020a23ae305713fd376a0627f610302018c39ec3aa540519dccceb764324282dfbf0bdda6cc,
fd358773a94c1770980e92e66fcd9e4f70d6f3ef35dff86c65a97826698c750489682c2d1d36ab75ddb588da65b61cd6fc63,
cb8a60222389c9ff9ff4e4e492a4f16ed7ea0e6b781379afc7fad78539fbf8da54b0ef8ea7ef9680543ebc0c18a908092bd1,
9cdbf58a3d454d2b14ebf17167d045887ab5eb3a21d3916acc393475011a079c350295fa8b4b324dab63a00f1fbadfb22edb,
cda510824ef5bc82cd4e014c851ed367dbd6da8828cc261070a0db9cc9341764baf445506a12a7eb7265434f29d63c65b3a1,
8d7c4bbcd42364b93b8cae11eff8f50115e36f1f4f4e6a492687bc2374444c4eaf80e1903eb13fcdfbea6f00de999e0f0587,
107b23e4b7e5a16149a8ea7f75c45c607bb5974cbbdf36077615d92591f4830ec5b2b33945d82e8e526f92cb0072cbf8a260,
cda4ab39b6f2b67d1d283077a1beb01771639eff1ae371372bb2555de594699821d43509fdd7014bcf3e5098bd13c30c8199,
a330f59ee2e48051362241f9a24ba1adad4b61fdd18676cd209799bbec6775dc01120abb0e157589d3f594051b5ae2dd6572,
b8e98c3979610c67ea65433a560ab6cf8663c9de201ae1051a14034b317f90aaa1085b49eba3d86748677f4e0575169fb76c,
6753542147a9cf38f4d040f205483a798d1d2a2c0cf2283ec98c735bf82422a8ecdea432cee8c76a00917b8add7eac5aa0b4,
8d8e0c2caeed82f21ddb288affe2fb567c008e8982cb5a4d07343dc4fd6679f550856649fe4bd40eec9747485c660b01e55e,,
c261014cf13c462815e0afece1512409d2549a699e33eaf8cb23b0b23719c870c83817fcaa7466d5d88a1ae240458ba0201a,
2ac55e6bc39eb79694bf00c2b69768365b7833d9f0cb7df078525d9ab98eba5ce2bfc3cc1fb9f4398c49c16073fb5d863172,
77ab6010d7bc664b6861927322276b2d35d4f5ff2d6bc2eec3da9ef936ae836dfbed6783a8c7f9970e19d46e43b52e49a0f6,
4109f993c94f8ca40c6932d01a726fb173beb60e34b57bf488f86fe9e6c12f7f7497c720fa95099c6a43cb3442444b367ea4,
7891bdf8a52dc19d311f392fa5f34509c6dcb33b8b8e291131ca5d46c517ea0933868874244aff1b3345ea5279fe0c659709,
200e69e8ec8e6104834596c2fefe8ed772ba9b7de4f1287c91c3b91469dd985fbb93d55a9497b2606ae9003975458b6b054b,
a2de28933b2cf1f9166cf3aab732f5c6b68967eddef0472a8577a82f37e77bcfc45a5e0adc11d382160d3c84ec14e0e75b5d,
1fa6bcf4d9ef2076aa016e78db575595a9155dfe6484a9812ae690fc20c244bf2d09355ba7dbc32495330a21b6e3c893ba6b,
b01a0b4ba3d8ae159d330720bb8baffe3ad2504b221151b8f68304ed7c14a03d21f75a4e6ad16873ea0c8904717478d3f7c4,
a00ae3e9a8c89f5a0f0fae92934d23adeb9117ef7c91f80f0d5306eca558b77422f273283e867a6b7320e91895087e652ed7
其次,為避免測試流程中其他依賴組件(例如物理 Source、Sink)對維表關聯(lián)性能造成影響,對 SQL 的測試數(shù)據(jù)源使用 DataGen SQL Connector (支持在內(nèi)存中隨機或順序 生成記錄)及 BlackHole SQL Connector(吞掉所有輸入數(shù)據(jù),用于性能測試)。?
??????????????
CREATE TABLE `data_gen_source` (`t1` BIGINT, `t2` VARCHAR, `proctime` AS PROCTIME()) WITH (
'connector' = 'datagen',
'fields.t1.kind' = 'random',
'fields.t1.min' = '1',
'fields.t1.max' = '100000',
'rows-per-second' = '100000000'
);
CREATE TABLE `tb_dim_benchmark_1`(
`t1` BIGINT,
`t2` VARCHAR,
……
`t30` VARCHAR,
PRIMARY KEY (`t1`) NOT ENFORCED
) WITH (
'connector' = 'jdbc',
'url' = '',
'driver' = 'com.mysql.jdbc.Driver',
'sink.buffer-flush.max-rows' = '500',
'table-name' = 'tb_dim_benchmark_range_partitioned_10w'
);
CREATE TABLE blackhole_table (
`t1` BIGINT,
`t2` VARCHAR,
……
`t30` VARCHAR
) WITH ('connector' = 'blackhole');
INSERT INTO blackhole_table
SELECT tb1.`t1`,tb2.`t2`,tb2.`t3`,tb2.`t4`,tb2.`t5`,tb2.`t6`,tb2.`t7`,tb2.`t8`,tb2.`t9`,tb2.`t10`,tb2.`t11`,tb2.
`t12`,tb2.`t13`,tb2.`t14`,tb2.`t15`,tb2.`t16`,tb2.`t17`,tb2.`t18`,tb2.`t19`,tb2.`t21`,tb2.`t22`,tb2.`t23`,tb2.
`t24`,tb2.`t25`,tb2.`t26`,tb2.`t27`,tb2.`t28`,tb2.`t29`,tb2.`t30`
FROM `data_gen_source` tb1
??LEFT?JOIN?`tb_dim_benchmark_1`?FOR?SYSTEM_TIME?as?of?tb1.`proctime`?as?tb2?ON?tb1.`t1`?=?tb2.`t1`;
第三,測試結果
-
維表 1 對 1 關聯(lián),即 DataGen 生成隨機值與 OceanBase(索引字段)和HBase(RowKey)關聯(lián),測試數(shù)據(jù)如下表所示。
-
維表 1 對 N 關聯(lián),即 DataGen 生成隨機值與 OceanBase(二級索引列)關聯(lián), 測試那顆數(shù)據(jù)如下表所示。
基于測試結果,可以得到四個結論:
-
維表數(shù)據(jù)量在 2000 萬及 1 億條(大數(shù)據(jù)量)時,低任務并行度下的 OceanBase QPS 優(yōu)于 HBase,高任務并行度下 OceanBase 相比 HBase 有 3-4 倍性能提升,優(yōu)勢明顯。
-
維表數(shù)據(jù)量在 10w(小數(shù)據(jù)量)時,低任務并行度下 HBase QPS 略高于 OceanBase,高并行度下 OceanBase 優(yōu)勢明顯。
-
對 OceanBase 使用非索引列關聯(lián)性能較差,后續(xù)使用需注意大維表關聯(lián)時關聯(lián)字段加索引,實時計算平臺可從平臺功能角度優(yōu)化,例如用戶關聯(lián)了非索引列則在 SQL 校驗階段提示用戶創(chuàng)建索引。
-
對 OceanBase 使用二級索引列關聯(lián)(1 對 N 關聯(lián))性能良好,可滿足較高 QPS 業(yè)務場景需求。
從以上測試結果來看,在相同環(huán)境下,OceanBase 綜合性能要優(yōu)于 HBase,并且原生支持二級索引能力,部署簡單,具有更低的硬件成本和運維成本,因此,貝殼選擇使用 OceanBase 替換 HBase,作為實時計算平臺的實時維表存儲。
在 OceanBase 的應用過程中,貝殼也提出了一些建議:比如,發(fā)現(xiàn)普通的關系表不支持 TTL(當前使用的是 OceanBase 3.1.2 社區(qū)版本),經(jīng)與社區(qū)溝通,OceanBase 的 3.1.4 版本已經(jīng)支持 table API 或 Hbase API 等 API 模型,OceanBase 4.0 版本已經(jīng)支持全局二級索引。文章來源:http://www.zghlxwxcb.cn/news/detail-687709.html
另外,貝殼建議 OceanBase 在與大數(shù)據(jù)生態(tài)打通(例如導入導出、計算等)方面可以進一步加強,更好地支持大數(shù)據(jù)到 OceanBase 的導入導出等。文章來源地址http://www.zghlxwxcb.cn/news/detail-687709.html
到了這里,關于性能提升3-4倍!貝殼基于Flink + OceanBase的實時維表服務的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!