繁体   English   中英

从Apache Flink中的Kafka标头读取数据的方法

[英]Way to read data from Kafka headers in Apache Flink

我有一个项目正在使用来自Kafka的数据。 显然,标题中将包含几个字段,对于每个消息,我也需要阅读它们。 目前有没有办法在Flink中做到这一点?

谢谢!

@Jicaar,实际上,Kafka从版本0.11.0.0开始添加了Header概念。 https://issues.apache.org/jira/browse/KAFKA-4208

问题是flink-connector-kafka-0.11_2.11 flink-1.4.0附带的flink-connector-kafka-0.11_2.11 ,据说支持kafka-0.11.0.0只是在从kafka读取时忽略消息标头。

因此,不幸的是,除非您在flin中实现自己的KafkaConsumer,否则无法读取这些标头。

我也对读入kafka消息标题感兴趣,并希望Flink团队会对此提供支持。

我遇到了类似的问题,并在Flink 1.8中找到了实现此目的的方法。 这是我写的:

FlinkKafkaConsumer<ObjectNode> consumer = new FlinkKafkaConsumer("topic", new JSONKeyValueDeserializationSchema(true){
    ObjectMapper mapper = new ObjectMapper();
    @Override
    public ObjectNode deserialize(ConsumerRecord<byte[], byte[]> record) throws Exception {
        ObjectNode result = super.deserialize(record);
        if (record.headers() != null) {
            Map<String, JsonNode> headers = StreamSupport.stream(record.headers().spliterator(), false).collect(Collectors.toMap(h -> h.key(), h -> (JsonNode)this.mapper.convertValue(new String(h.value()), JsonNode.class)));
            result.set("headers", mapper.convertValue(headers, JsonNode.class));
        }

        return result;
    }
}, kafkaProps);

希望这可以帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM