当架构注册表中的架构发生更改时,Spark流应用程序将失败。
我的流式应用程序正在使用avro kafka主题中的数据,该主题基于注册表中提供的最新架构。当源端/模式注册表上发生模式更改时。我的应用程序失败。
def schemaFromString(json: String): Schema = {
val parser = new Schema.Parser()
parser parse json
}
def convertSchemaToSpark(schema: Schema): StructType = {
SchemaConverters.toSqlType(schema).dataType.asInstanceOf[StructType]
}
private val schemaRegistryPerUrl =
collection.mutable.Map[String, SchemaRegistryClient]() withDefault {
url => new CachedSchemaRegistryClient(url, Int.MaxValue)
}
val getSerializableSchemaRegistryReference: String => () => SchemaRegistryClient = {
(url: String) => {
() => {
schemaRegistryPerUrl(url)
}
}
}
val registry = Util.getSerializableSchemaRegistryReference(config.getString("kafka.schema.registry.url"))
val latestMeta = registry().getLatestSchemaMetadata(config.getString("kafka.metadata"))
schemaStr = latestMeta.getSchema
println("schemaStr::: " + schemaStr)
val latestSchema = () => Util.schemaFromString(schemaStr)
val schema = Util.convertSchemaToSpark(Util.schemaFromString(schemaStr))
println("schema::: " + schema)
只要发生模式更改,应用程序就会失败,可以为此提供一些帮助