在kafka连接器的DeserializationSchema或过程中函数之后进行avro反序列化是否更好

时间:2019-06-28 15:33:20

标签: apache-kafka apache-flink

因此,我有一个用例,其中有一个kafka连接器,它使用来自kafka主题的avro字节数组并将其转换为Avro对象。看起来很简单,但是我意识到,如果反序列化由于某种原因而失败,例如不匹配架构或某些东西,那么唯一的处理选项就是记录错误并输出空字节数组或抛出错误(我不这样做) (对于长期工作而言,这不是一个好主意)。

但是,如果kafka连接器的反序列化器仅接收字节数组,将其输出,然后下游处理函数进行验证和转换,则如果发生错误,则可能会将错误作为“错误消息” pojo写入侧面输出然后将其写入错误kafka主题,该主题将使跟踪失败的消息和相关数据变得更加容易。

kafka连接器的序列化逻辑中是否已经有这样做的方法?或者这会带来一些严重的性能问题(例如,kafka连接器的序列化逻辑是否经过优化,可以比仅在下游函数中完成这些转换幅度更快)?

感谢您的任何预先输入!

1 个答案:

答案 0 :(得分:2)

不,应该没有明显的性能差异,并且在下游进行序列化当然更加灵活。例如,您还可以以比源更高的并行度来运行序列化,如果序列化在您的情况下非常昂贵,这可能是有道理的。

我现在看到的唯一缺点是,您不能使用按分区加水印[1]。最近,与这些主题[2]有关的开发邮件列表也进行了讨论。

希望这会有所帮助。

[1] https://ci.apache.org/projects/flink/flink-docs-release-1.8/dev/connectors/kafka.html#kafka-consumers-and-timestamp-extractionwatermark-emission [2] http://apache-flink-mailing-list-archive.1008284.n3.nabble.com/DISCUSS-Connectors-and-NULL-handling-td29695.html