KafkaConsumer可以从SourceTask编写的主题中读取数据吗?

时间:2019-05-02 21:54:09

标签: apache-kafka apache-kafka-connect

如果我们使用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的架构?

谢谢!

1 个答案:

答案 0 :(得分:1)

您将依靠Converter接口为您处理序列化。

此源代码中的方法是fromConnectData

enter image description here

我所知道的Struct个对象。

  • JsonConverter包含在Apache Kafka中

  • AvroConverter来自Confluent

  • ProtobufConverter来自BlueApron。

如果使用StringConveter,最终将得到类似于Struct{dim0=1,dim1=2,dim2=3,dim3=4}的记录,与使用其他选项获取适当的结构化对象相比,该记录必须手动解析。

转换器通常是SerializerDeserializer接口的包装,因此您应在使用者代码中包括相应的Deserializer类。

img src:Deep Dive,来自Confluent的博客。