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_name
和 topic_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)
其中:STATUS
为 start | 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)