我正在为我们的项目构建遥测管道处理。我有 AVRO 编码进来并使用 Schema 注册表,我将 Avro 数据解码为基于 SchemaID 的 GenericRecord。我计划运行 Spark 作业以进行进一步的下游处理。但是,在 Spark 作业中处理数据模型的最佳方法是什么?所有示例都指向使用 result.get("fieldname") 但这是建议的方式吗?
1 回答
1
使用 GenericRecord 的好处是,它从消费者那里抽象出与模式注册表相关的详细信息。因此,您不必从有效负载记录中获取模式 id,对融合模式注册表进行 GET 调用以获取 avro 模式,然后进行反序列化。我不知道因此会对性能产生任何影响,但肯定很想知道是否有任何影响。
另一方面,如果您希望使用自己的 avro bytearray 序列化器/反序列化器,则需要对 avro 有效负载的结构有所了解。例如,您必须解析 avro 有效负载以验证魔术字节,提取 4 字节模式 ID 和模式,等等...您可能希望实现已检索模式的内存缓存,因为它是一个很好的减少对模式注册表的 http 调用次数的想法。有关这方面的更多详细信息,可以在此处找到。
于 2017-08-19T10:55:27.310 回答