Flink怎么获取kafka的topic,partition,offset信息

背景

Flink在消费到Kafka的数据后,我们经常会把数据转成POJO对象,方便后面对数据的处理,但是每个POJO类型是不一样的,每次需要新开发一个反序列化的类,这样就会有大量重复的代码,怎么实现一个通胀的反序列化类解决呢?

另一个场景,当flink同时订阅多个kafka的topic时,我们需要根据不同的topic做不同的逻辑处理,来源topic_A的数据,设置pojo的一个属性为1,来源topic_B的数据,设置POJO的属性为2,这要怎么处理呢?

方法

以上两个问题其实都只要实现KafkaDeserializationSchema这个接口就可以解决问题。

1、通用型反序列化

/**
 * @desc 自定义实现kafka的消息反序列化
 * @throws
 */
public class CustomKafkaDeserializationSchema<T>  implements KafkaDeserializationSchema<T> {
    @Override
    public boolean isEndOfStream(T nextElement) {
        return false;
    }

    @Override
    public T deserialize(ConsumerRecord<byte[], byte[]> record) throws Exception {
        TypeReference<T> MAP_TYPE_REFERENCE =new TypeReference<T>(){};
        T bTrack = JSON.parseObject(record.value(),MAP_TYPE_REFERENCE.getType());

        return bTrack;
    }

    @Override
    public TypeInformation<T> getProducedType() {
        return TypeInformation.of(new TypeHint<T>() {
            @Override
            public TypeInformation<T> getTypeInfo() {
                return super.getTypeInfo();
            }
        });
    }
}

2、自定义序列化

// kafka数据源
DataStreamSource<POJO> stream = env.addSource(
        new FlinkKafkaConsumer<POJO>(topics, new CustomKafkaDeserializationSchema<POJO>(), PropertyFileUtils.readProFile("kafka.properties"))
                .setCommitOffsetsOnCheckpoints(true)
                .setStartFromLatest());

3、如果需要获取kafka相关信息,如下图方法就可以读取到

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值