[英]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.