GBase 8a支持从Kafka 加载数据,本文介绍该功能的使用方式并提供样例。GBase 8a当前支持单次加载,以及以类似定时任务的形式自动加载。
原文: https://www.gbase8.cn/6335
目录
环境
kafka版本
kafka_2.13-2.8.0
数据
原始topic一共两行数据, 名字为gbase8a,主机名为rh_210,对应IP是10.0.2.210.
[root@localhost kafka]# bin/kafka-console-consumer.sh --topic gbase8a --from-beginning --bootstrap-server localhost:9092
1234,First
5678,Second
^CProcessed a total of 2 messages
[root@localhost kafka]#
[root@localhost kafka]# bin/kafka-console-consumer.sh --topic gbase8a --from-beginning --bootstrap-server localhost:9092
1234,First
5678,Second
^CProcessed a total of 2 messages
操作系统
CentOS 7.9
单次加载样例
指通过LOAD语句,从kafka加载一次数据的方法,针对kafka的流式数据,后面有自动定时加载的方法。
语法
如下只给出协议数据源部分,完整的样例看后面。 和加载有关的完整语法请参考 GBase 8a 集群加载数据LOAD的方法 https://www.gbase8.cn/121
kafka://broker/topic[?[duration=XX][&][partition=partitionid|offset][#frombeginning]
- broker:kafka的IP和端口,比如10.0.2.201:9092
- topic:kafka的数据源的topic名字,注意不要有横线,只包含常见的字母数字和下划线,不要有特殊字符,横线等。
- 参数部分以问号开始,多个参数间用&分割
- duration:获取数据提交间隔。当达到该时间后,将提交这部分数据,保存到数据库。一般加载建议,30-300秒都是合适的。太短的间隔会导致数据库磁盘负载增加。
- partition:kafka里的分区。
- partitionid 分区编号
- offset:偏移量。 最初的数据从0开始,但存在老化删除的情况,可以用 #frombeginning从头开始
- #frombeginning:整个topic从头开始。注意不一定是0,因为有老化。也请注意这个参数和partition的区别,那个是指定某个partition从头开始,这个用来指定整个topic从头开始。不能出现2次,因为从语义上是冲突的。
Kafka单次加载进度元数据表
在gclusterdb库下面,保存了和该表Kafka加载进度的元数据。注意不是每个用户都有权限查看gclusterdb库的。表的命名规则是
topic名字_库名_表名,比如 gbase8a_testdb_tt1,表示topic是gbase8a, 库是testdb,表是tt1。样例看后面的章节。
列名 | 类型 | 说明 |
---|---|---|
scn | bigint(20) | SCN号 |
partition_offset | varchar(2048) | 偏移量,包括分区和offset |
commit_time | timestamp | 提交的时间戳 |
警告:
如果一个表,从多个kafka数据源加载,且存在了重复的topic 名字,会出现该元数据表的数据混乱。 所以建议在命名kafka里topic名字时,能加上主机名或IP。
样例
加载整个topic
其中duration设置了10秒,从头开始加载。
gbase> load data infile 'kafka://rh7_210:9092/gbase8a?duration=10000#frombeginning' into table testdb.tt1;
Query OK, 2 rows affected (Elapsed: 00:00:10.70)
Task 28673 finished, Loaded 2 records, Skipped 0 records
gbase> select * from tt1;
+-----