最小写入副本数

默认情况下,数据导入要求至少有超过半数的副本写入成功,导入才算成功。然而,这种方式不够灵活,在某些场景会带来不便。

举个例子,对于两副本情况,按上面的多数派原则,要想导入数据,则需要这两个副本都写入成功。这意味着,在导入数据过程中,不允许任意一个副本不可用。这极大影响了集群的可用性。

为了解决以上问题,Doris 允许用户设置最小写入副本数 (Min Load Replica Num)。对导入数据任务,当它成功写入的副本数大于或等于最小写入副本数时,导入即成功。

用法

单个表的最小写入副本数

可以对单个 olap 表,设置最小写入副本数,并用表属性min_load_replica_num来表示。该属性的有效值要求大于 0 且不超过表的副本数。其默认值为 -1,表示不启用该属性。

可以在创建表时设置表的min_load_replica_num

  1. CREATE TABLE test_table1
  2. (
  3. k1 INT,
  4. k2 INT
  5. )
  6. DUPLICATE KEY(k1)
  7. DISTRIBUTED BY HASH(k1) BUCKETS 5
  8. PROPERTIES
  9. (
  10. 'replication_num' = '2',
  11. 'min_load_replica_num' = '1'
  12. );

对一个已存在的表,可以使用语句ALTER TABLE来修改它的min_load_replica_num

  1. ALTER TABLE test_table1
  2. SET ( 'min_load_replica_num' = '1');

可以使用语句SHOW CREATE TABLE来查看表的属性min_load_replica_num

  1. SHOW CREATE TABLE test_table1;

输出结果的 PROPERTIES 中将包含min_load_replica_num。例如:

  1. Create Table: CREATE TABLE `test_table1` (
  2. `k1` int(11) NULL,
  3. `k2` int(11) NULL
  4. ) ENGINE=OLAP
  5. DUPLICATE KEY(`k1`)
  6. COMMENT 'OLAP'
  7. DISTRIBUTED BY HASH(`k1`) BUCKETS 5
  8. PROPERTIES (
  9. "replication_allocation" = "tag.location.default: 2",
  10. "min_load_replica_num" = "1",
  11. "storage_format" = "V2",
  12. "light_schema_change" = "true",
  13. "disable_auto_compaction" = "false",
  14. "enable_single_replica_compaction" = "false"
  15. );

全局最小写入副本数

可以对所有 olap 表,设置全局最小写入副本数,并用 FE 的配置项min_load_replica_num来表示。该配置项的有效值要求大于 0。其默认值为 -1,表示不开启全局最小写入副本数。

对一个表,如果表属性min_load_replica_num有效(即大于 0),那么该表将会忽略全局配置min_load_replica_num。否则,如果全局配置min_load_replica_num有效(即大于 0),那么该表的最小写入副本数将等于min(FE.conf.min_load_replica_num,table.replication_num/2 + 1)

对于 FE 配置项的查看和修改,可以参考这里

其余情况

如果没有开启表属性min_load_replica_num(即小于或者等于 0),也没有设置全局配置min_load_replica_num(即小于或等于 0),那么数据的导入仍需多数派副本写入成功才算成功。此时,表的最小写入副本数等于table.replicatition_num/2 + 1