我有一个项目,我从Kafka消费数据。显然,有几个字段将包含在标题中,我还需要为每条消息阅读。有没有办法在Flink目前这样做?
谢谢!
答案 0 :(得分:2)
@Jicaar,实际上Kafka自版本Header
以来添加了0.11.0.0
概念。 https://issues.apache.org/jira/browse/KAFKA-4208
问题是flink-connector-kafka-0.11_2.11
附带flink-1.4.0
,据说支持kafka-0.11.0.0
只是在从kafka读取时忽略了邮件标头。
所以很遗憾,除非你在flin中实现自己的KafkaConsumer,否则无法读取这些标题。
我也对kafka邮件标题中的readin感兴趣,并希望Flink团队将为此添加支持。
答案 1 :(得分:1)
我遇到了类似的问题,并在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);
希望这会有所帮助!
答案 2 :(得分:0)
在更多地观察卡夫卡时,卡夫卡实际上并没有头球。你可以看到元数据,但它不是一回事。