Flink Avro状态演变

时间:2019-01-15 11:22:06

标签: scala apache-kafka apache-flink avro flink-streaming

我有一个flink拓扑,该拓扑在CoProcessFunction中使用ListState [MyAvroClass]。

在我的CoProcessFunction中,我初始化

  input = "Python is interactive"

  parts = input.split(" ")

  maxlen = max(map(lambda part: len(part), parts))
  # or this, if you want to go even more elegant:
  maxlen = max(map(len, parts))

  print ('*' * (maxlen + 4))
  for part in parts:
      spaces = maxlen - len(part)
      print("* " + part + (" " * spaces) + " *")
  print ('*' * (maxlen + 4))

它运行正常,但是我无法处理avro模式的演变。即使我要从保存点重新开始工作,也存在反序列化数据的问题,例如,当我遍历listState迭代器时。

我一直出错:

var myState: ListState[MyAvroClass] = _

override def open(parameters: Configuration): Unit = {
  val avroSerializer = new AvroSerializer[MyAvroClass](classOf[MyAvroClass])
  myState = getRuntimeContext.getListState[MyAvroClass](new ListStateDescriptor[MyAvroClass]("myState", avroSerializer))
}

似乎他正在尝试获取一个字段,而该字段在我的avro类的先前版本中不存在。知道我该如何解决吗?

0 个答案:

没有答案