千家信息网

Pulsar IO 中怎么调用Schema

发表于:2025-02-03 作者:千家信息网编辑
千家信息网最后更新 2025年02月03日,这篇文章给大家介绍Pulsar IO 中怎么调用Schema ,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Schema 是一种描述数据的数据 。例如,数据库中表的信息和字段类型
千家信息网最后更新 2025年02月03日Pulsar IO 中怎么调用Schema

这篇文章给大家介绍Pulsar IO 中怎么调用Schema ,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

Schema 是一种描述数据的数据 。例如,数据库中表的信息和字段类型等都是 Schema。Pulsar 对 Schema 也有比较好的支持。


>>> Schema 简单应用 <<<

在使用 pub/sub 生产和消费消息时,可以通过以下代码使用 Schema:
              
public class SensorReading { public float temperature;
public SensorReading(float temperature) { this.temperature = temperature; }
// A no-arg constructor is required public SensorReading() { }
public float getTemperature() { return temperature; }
public void setTemperature(float temperature) { this.temperature = temperature; } } Producer producer = client.newProducer(JSONSchema.of(SensorReading.class)) .topic("my-topic") .create(); Consumer consumer = client.newConsumer(JSONSchema.of(SensorReading.class)) .topic("my-topic") .subscriptionName("my-subscription") .subscribe();


通过以上操作,生产者和消费者可以识别出关于 SensorReading 这个类的含义。这是 Schema 在客户端的应用,也是比较普遍的使用方法。

前文已经提到,Source 和 Sink 是对 pub/sub 的封装,因此,Schema 的应用也是基于以上原理。以下为详细说明。

>>> Source 中的 Schema <<<

在内建的 Sink 中,实现了一个 Consumer,用于接收从 Pulsar 发来的数据。
              if (conf.getSerdeClassName() != null && !conf.getSerdeClassName().isEmpty()) {              schema = (Schema) topicSchema.getSchema(topic, typeArg, conf.getSerdeClassName(), true);          } else {              schema = (Schema) topicSchema.getSchema(topic, typeArg, conf.getSchemaType(), true);          }


getSerdeClassName 会获取用户指定的用于序列化与反序列化的类,通过指定 -- custom-serde-inputs 参数,从而构建真正的 Schema。
              
case NONE: return (Schema) Schema.BYTES;
case AUTO_CONSUME: case AUTO: return (Schema) Schema.AUTO_CONSUME();
case STRING: return (Schema) Schema.STRING;
case AVRO: return AvroSchema.of(SchemaDefinition.builder().withPojo(clazz).build());
case JSON: return JSONSchema.of(SchemaDefinition.builder().withPojo(clazz).build());
case KEY_VALUE: return (Schema)Schema.KV_BYTES();
case PROTOBUF: return ProtobufSchema.ofGenericClass(clazz, Collections.emptyMap()); }


关于Pulsar IO 中怎么调用Schema 就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

0