GBase 8a MPP Cluster Kafka流式加载功能使用方法

1. 参数配置

使用 kafka consumer 需要按照如下方式进行配置,可变更参数的配置参考补充说明

1.1 配置 gcluster 参数

$GCLUSTER_BASE/config/gbase_8a_gcluster.cnf

# 下面是 gbase_8a_gcluster.cnf 文件内容

[gclusterd]

_gbase_transaction_disable=1 # 注意一定不要用 0

_gcluster_insert_cache_buffer_flag=1

gcluster_kafka_consumer_enable=1

gcluster_lock_level=10 # 不建议用 2

gcluster_assign_kafka_topic_period=20

gcluster_kafka_max_message_size=1000000

gcluster_kafka_batch_commit_dml_count=100000

gcluster_kafka_local_queue_size=210000

gcluster_kafka_consumer_batch=100

gcluster_kafka_user_allowed_max_latency=15

参数说明:

  • gcluster_assign_kafka_topic_period,自动接管 consumer 的时间周期,单位为秒。例如 A 节点宕机了,最大需要等待 gcluster_assign_kafka_topic_period 秒之后,A 节点负责的同步任务会被其他节点接管。最小值 20s,最大值 120s。
  • gcluster_kafka_max_message_size,从 kafka topic 获取消息的最大长度,单位为字节,最大值 1000000000 字节。这个值要大于等于 kafka server 的配置(message.max.bytes),否则可能造成消费问题。
  • gcluster_kafka_batch_commit_dml_count,一次提交 dml 操作的数量,适当调大能明显提高性能,但是如果一个 topic 涉及多张表则建议该参数调小。
  • gcluster_kafka_user_allowed_max_latency,允许消息再 GBase 8a MPP Cluster 集群层缓存多长时间,超时之后必须马上提交,单位是毫秒。典型值一般可以设置为 50000 ~ 20000。
  • gcluster_kafka_local_queue_size,储存 dml 操作的队列的长度,建议至少为 gcluster_kafka_batch_commit_dml_count 的二倍多一点。
  • gcluster_kafka_consume_batch,consumer 一次读取 kafka 消息的条数。建议设为 10 ~ 1000。
  • gcluster_kafka_ignore_pos_field,控制单个 consumer 是否比对 POS(防止重复消费)。默认值为 0,即检查重复消息;值为 1 时,不检查重复消息。
  • t_kafka_varchar_auto_truncate,在 consumer 消费 kafka 消息时,遇到长度超数据库定义长度的字段(仅限 varchar),开启可以自动进行截位并正常消费入库。缺省值为 0。
  • gcluster_kafka_message_format_type,设定 consumer 在解析 kafka 消息时,以什么格式来解析。取值范围:[JSON | PUREDATA | AUTO_DETECT]。默认值为AUTO_DETECT。

1.2 配置 gnode 参数

$GBASE_BASE/config/gbase_8a_gbase.cnf

_gbase_transaction_disable=1

gbase_tx_log_mode=ONLY_SPECIFY_USE

gbase_buffer_insert=1024M

gbase_tx_log_flush_time=5

2. 使用 consumer 方式加载 kafka 流式数据

加载支持从 kafka 读取数据,并以微批量的方式提交入库。在使用该方式加载 kafka 流式数据之前,需要用户先通过以下 SQL 命令,创建 loader 类型的 consumer,并启动该创建的 consumer。


2.1 创建 loader 类型的 consumer

create kafka consumer <consumer_name> 
    loader topic <topic_name> 
    brokers <broker_list> 
    partitions <partition_list> 
    durantion <duration>
    into table <db_name>.<tb_name>
    <loader_options>;

创建 consumer时会判断 topic 在指定的 brokers 上是否存在,如果不存在会报错,所以用户需要先创建 topic,再创建 consumer。


其中:

  • consumer_name 不允许重复,可以由字母数字下划线组合,如:abc_123
  • topic_name 是用户要加载入库数据存放在 kafka 集群的 topic name。
  • broker_list 是 kafka 集群的有效 brokers 列表,多个 broker 之间使用逗号分隔,指定多个 broker 可实现高可用。
  • partition_list 是要加载的 topic 的 partition 子集或者全集,多个 partition 之间使用逗号分隔。partition_list 可以省略不写,默认是该 topic 的全部 partition。
  • duration 是微批量提交时间,单位是 ms,是指当加载读取 kafka 数据 duration 个单位 ms 后,开始提交入库。
  • loader_options 是指 LOAD SQL 中 into table 后面的所有有效可选 options,可根据具体的数据格式设定。

示例如下:

create kafka consumer t10
    loader topic t10
    brokers '192.168.6.72:9092,192.168.6.73:9092,192.168.6.74:9092'
    partitions '0,1,2'
    duration 10000
    into table test.lineitem
    data_format 3 fields terminated by '|';

建议:consumer_nametopic_name 相互关联。


2.2 启动 consumer 加载

consumer 创建成功后,并不会自动启动,并开始读取 kafka 指定 topic 数据进行加载。而是需要用户自行启动。
用户使用以下 SQL 命令进行 consumer 启动:

start kafka consumer <consumer_name>;

其中:consumer_name 是用户创建成功,并想要开始加载的 consumer。可以在非创建节点,使用该命令启动指定的 consumer。

示例如下:

gbase> start kafka consumer t10;
Query OK, 0 rows affected (Elapsed: 00:00:00.61)

注意:启动不存在的 consumer,启动命令会报错。


2.3 查询创建或者启动的 consumer

启用创建 consumer 成功或者启动 consumer 后,用户可以通过以下 SQL 命令查询指定 consumer_name 的状态。

show kafka consumer <consumer_name>;

示例如下:

gbase> show kafka consumer t10;
+------+------+------+----------+------+-------------------+-----------+----------+----------------------------------------+--------+
| NAME | TYPE | DB   | TABLE    | TOPIC| BROKERS           | PARTITIONS| DURATION | LOADER_OPTIONS                         | STATUS |
+------+------+------+----------+------+-------------------+-----------+----------+----------------------------------------+--------+
|  t10 |    L | test | lineitem |  t10 | 192.168.6.72:9092 |     0,1,2 |    10000 | DATA_FORMAT 3 FIELDS TERMINATED BY '|' |  start |
+------+------+------+----------+------+-------------------+-----------+----------+----------------------------------------+--------+
1 row in set (Elapsed: 00:00:00.46)

其中:STATUSstart | stop 两种状态。
注意:查询不存在的 consumer, 查询命令会报错。


2.4 停止 consumer 加载

由于某些原因,用户需要停止 consumer 加载的时候,可以使用如下 SQL 命令,将运行态的 consumer 停止。

stop kafka consumer <consumer_name>;

示例如下:

gbase> stop kafka consumer t10;
Query OK, 0 rows affected (Elapsed: 00:00:03.57)

需要注意:在停止运行态的 consumer时,不会强行终止 consumer 加载,而是在当次加载结束后,才会停止指定的 consumer。


2.5 删除 consumer

当用户需要修改或者不再使用创建的 consumer 时,可以使用如下的 SQL 命令将停止态的 consumer 删除。

drop kafka consumer <consumer_name>;

示例如下:

gbase> drop kafka consumer t10;
Query OK, 0 rows affected (Elapsed: 00:00:00.44)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值