背景 & 痛点
1, Flink 在消费到 kafka 的数据后,我们经常会把数据转成 POJO 对象,方便后面对数据的处理,但是每个人 POJO 类型是不一样的,每次都需要新开发一个反序列化的类,这样会带来大量的重复代码.能不能实现一个通用的反序列类来解决这个问题?
2, 如何获取到 kafka 的元数据信息? 比如我有这样的需求,一个 Flink 任务消费了多个 topic 的数据后面要根据不同的 topic 名称做不同的处理逻辑,再比如我需要获取到数据写入 kafka 的时间戳,做全链路的延迟监控.那该如何获取数据写入 kafka 的时间戳?
解决方案
我们可以利用 java 的泛型实现 KafkaDeserializationSchema 这个接口从而实现一个通用的泛型类来解决这个问题.
KafkaDeserializationSchema 源码
@PublicEvolving
public interface KafkaDeserializationSchema<T> extends Serializable, ResultTypeQueryable<T> {
/**
* Initialization method for the schema. It is called before the actual working methods
* {@link #deserialize} and thus suitable for one time setup work.
*
* <p>The provided {@link DeserializationSchema.InitializationContext} can be used to access additional features such as e.g.
* registering user metrics.
*
* @param context Contextual information that can be used durin