消费Avro数据时火花流的架构演变问题

时间:2019-08-28 18:34:49

标签: spark-streaming spark-streaming-kafka spark-avro

当架构注册表中的架构发生更改时,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)


只要发生模式更改,应用程序就会失败,可以为此提供一些帮助

0 个答案:

没有答案