如果我们使用SourceTask将数据写入Kafka主题数据,其中我们为SourceRecords定义了一个与Schema.STRING_SCHEMA不同的Schema,例如,这是一个自定义模式:
private final Schema valueSchema = SchemaBuilder.struct()
.field("dim0", Schema.FLOAT64_SCHEMA)
.field("dim1", Schema.FLOAT64_SCHEMA)
.field("dim2", Schema.FLOAT64_SCHEMA)
.field("dim3", Schema.FLOAT64_SCHEMA)
.build();
然后KafkaConsumer可以从该主题读取数据吗?
还是只有SinkTask可以从该主题读取数据,因为您可以像定义SourceRecords一样定义SinkRecords的架构?
谢谢!
答案 0 :(得分:1)
您将依靠Converter
接口为您处理序列化。
此源代码中的方法是fromConnectData
。
我所知道的Struct
个对象。
JsonConverter
包含在Apache Kafka中
AvroConverter
来自Confluent
ProtobufConverter
来自BlueApron。
如果使用StringConveter
,最终将得到类似于Struct{dim0=1,dim1=2,dim2=3,dim3=4}
的记录,与使用其他选项获取适当的结构化对象相比,该记录必须手动解析。
转换器通常是Serializer
和Deserializer
接口的包装,因此您应在使用者代码中包括相应的Deserializer
类。
img src:Deep Dive,来自Confluent的博客。