创建数据订阅

更新时间:
复制 MD 格式

本文介绍通过PullPush模式创建数据订阅,实现增量数据的实时拉取消费或推送至Kafka进行自由消费。

前提条件

通过Pull模式创建数据订阅通道

  1. 进入LTS(原BDS)页面,在左侧导航栏中,选择数据订阅 > Pull模式

    进入 Lindorm CDC订阅通道列表 页面,页面右上角提供 创建数据订阅通道 按钮,列表展示已有通道的订阅通道 Id、Lindorm 表名、主题名及操作(详情删除)。

  2. 单击创建数据订阅通道,并配置以下参数。

    名称

    描述

    源集群

    填写Lindorm实例ID。

    Lindorm表名

    选择需要创建数据订阅通道的Lindorm实例表,一条通道只能选择一张表格。

    主题名

    用于消费数据的主题名称。

    数据过期时间(天)

    表示数据可以保存的天数,默认为7天。

    主题分区数

    表示Kafka客户端为该主题设置多个分区,多分区可以并发消费数据,默认为4个分区。

  3. 单击提交

  4. (可选)找到目标订阅通道,单击操作列的详情,可以查看数据订阅通道详情、消费详情和存储详情。

  5. (可选)您可以通过以下代码在Kafka客户端对订阅数据进行消费。

    import org.apache.hadoop.hbase.util.Bytes;
    import org.apache.kafka.clients.admin.AdminClientConfig;
    import org.apache.kafka.clients.consumer.ConsumerConfig;
    import org.apache.kafka.clients.consumer.ConsumerRecord;
    import org.apache.kafka.clients.consumer.ConsumerRecords;
    import org.apache.kafka.clients.consumer.KafkaConsumer;
    import org.apache.kafka.common.serialization.ByteArrayDeserializer;
    import java.time.Duration;
    import java.util.Arrays;
    import java.util.Properties;
    public class TestConsume {
      public static void main(String[] args) throws Exception {
        // 创建订阅通道时填写的topic名称
        String topic = "test-topic";
        // 链接endpoint的配置项
        Properties props = new Properties();
        // 指定链接endpoint地址
        props.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, "ld-xxx:9092");
        // 指定Key序列化器,不可更改
        props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, ByteArrayDeserializer.class.getName());
        // 指定Value序列化器,不可更改
        props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, ByteArrayDeserializer.class.getName());
        // 指定消费组名称,在消费时会自动创建
        props.put(ConsumerConfig.GROUP_ID_CONFIG, "group-id-0");
        // 创建消费者
        KafkaConsumer<byte[], byte[]> consumer = new KafkaConsumer<>(props);
        // 订阅主题
        consumer.subscribe(Arrays.asList(topic));
        // 用消费者拉取数据
        ConsumerRecords<byte[], byte[]> records = consumer.poll(Duration.ofMillis(10000));
        for (ConsumerRecord<byte[], byte[]> record : records) {
          // 查看数据内容
          System.out.println("key: " + Bytes.toString(record.key()));
          System.out.println("value: " + Bytes.toString(record.value()));
        }
        // 提交当前消费位移
        consumer.commitSync();
        // 关闭消费者
        consumer.close();
      }
    }
    说明

    数据消费格式说明请参见数据消费格式

通过Push模式创建数据订阅

推送流程

数据订阅功能将云原生多模数据库 Lindorm表格的增量数据消息主动推送至下游Kafka,推送流程如下。

image

创建Lindorm Streams

  1. 进入LTS(原BDS)页面,在左侧导航栏中,选择数据订阅 > Push模式

  2. 单击create,并配置以下参数。

    参数

    描述

    Lindorm集群

    选择已添加Lindorm宽表数据源。

    表名

    需要填写数据订阅的表名,格式为:namespace.tablename。

    例如:ns1.table1表示订阅空间名称为ns1中的表table1数据。

    黑名单表(可选)

    填写黑名单表名。该表中的增量数据不会被推送。

    MessageStorage Type

    选择KAFKA。

    Storage Datasource

    选择已添加Kafka数据源。

    MessageStorage Config

    • kafka_topic表示需要填写Kafka Topic的名称。

    • kafka_ttl:无需填写,请忽略。

    • kafka_partition_num:无需填写,请忽略。

    重要

    Push模式下Topic需要在Kafka中提前建好。

    MessageVersion

    消费格式,默认格式为DebeziumV2。

    Message Config

    • old_image表示消息中是否包含当前行修改前的值,需填写为true,无需填写false

    • new_image表示消息中是否包含修改后整行的值,需填写为true,无需填写false

    • with_schema表示消息中是否携带表的Schema信息,建议填写为false,避免Schema造成消息膨胀。

    • ignore_family_prefix表示导出的列名是否去掉列族,例如完整列名为f:name,将该参数配置为true后导出的列名为name

  3. 单击提交