创建数据订阅

更新时间:
复制 MD 格式

本文介绍通过Pull和Push模式创建数据订阅,实现增量数据的实时拉取消费或推送至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. 单击提交。