Apache kafka 实时更新Flink中的序列化模式
我有一大堆工作看起来像这张素描Apache kafka 实时更新Flink中的序列化模式,apache-kafka,apache-flink,avro,flink-streaming,Apache Kafka,Apache Flink,Avro,Flink Streaming,我有一大堆工作看起来像这张素描 Source<GenericRecord> kafkaSource; kafkaSource .map(function that takes generic record) .map( ... ) ... .sink(kafka sink that takes in generic records) 源卡夫卡索资源; 卡夫卡索 .map(获取通用记录的函数) .map(…) ... .sink(接受通用记录的卡夫卡接
Source<GenericRecord> kafkaSource;
kafkaSource
.map(function that takes generic record)
.map( ... )
...
.sink(kafka sink that takes in generic records)
源卡夫卡索资源;
卡夫卡索
.map(获取通用记录的函数)
.map(…)
...
.sink(接受通用记录的卡夫卡接收器)
我们将数据表示为GenericRecords的原因是,在运行时使用的Avro模式会有所不同。我们为一个单独的主题编写模式描述。我们知道向/从操作符/kafka传递GenericRecords会降低性能,因此我们为GenericRecords编写了自己的kafka序列化模式和Kryo序列化程序。棘手的部分是,我们的定制序列化程序需要知道当前模式列表是什么,这样它就可以知道如何在消息通过图时对其进行序列化/反序列化
我一辈子都搞不懂如何以理智的方式将这些信息传递到我们的序列化程序中。我知道的方法有:
我知道这是一个复杂的情况,所以我希望它能被清楚地理解。我觉得很困惑,因为我所考虑的解决方案似乎都不充分。还有其他我没有想到的选择吗?有没有更好的方法可以在不重新启动的情况下管理一组动态Avro模式?我想听听你的建议!谢谢 您是否考虑过schema registry?希望不要引入其他服务来解决此问题。话虽如此,你的评论激励我尝试不同的解决方案;根据需要抓取模式+缓存,而不是在后台。我支持对模式注册表的建议。这是处理问题的标准方法。顺便说一句,如果您使用与卡夫卡相同的协议(模式id+有效负载),
genericord
应该比Kryo
快。