Apache flink 使用Flink解析来自Kafka的json格式的字符串

Apache flink 使用Flink解析来自Kafka的json格式的字符串,apache-flink,flink-streaming,Apache Flink,Flink Streaming,我想做的是读取json格式的字符串 {"a":1, "b":2} 使用flink,然后通过其键提取特定值,例如1 请参阅此处: 我所做的是: val params = ParameterTool.fromArgs(args) val env = StreamExecutionEnvironment.getExecutionEnvironment val kafkaConsumer = new FlinkKafkaConsumer010( params.getRequired("input

我想做的是读取json格式的字符串

{"a":1, "b":2}
使用flink,然后通过其键提取特定值,例如1

请参阅此处:

我所做的是:

val params = ParameterTool.fromArgs(args)
val env = StreamExecutionEnvironment.getExecutionEnvironment

val kafkaConsumer = new FlinkKafkaConsumer010(
  params.getRequired("input-topic"),
  new JSONKeyValueDeserializationSchema(false),
  params.getProperties
)

val messageStream = env.addSource(kafkaConsumer)
但我不太确定如何向前推进。在上面的链接中,它说我可以使用
objectNode.get(“field”).as(Int/String/…)()
按键提取特定的值,但我想知道如何才能做到这一点

或者有一种完全不同的方式来实现我想要的


谢谢

对来自卡夫卡的数据应用数据转换,如下所示:

messageStream.map(new MapFunction<ObjectNode, Object>() {
    @Override
    public Object map(ObjectNode value) throws Exception {
        value.get("field").as(...)
    }
})
messageStream.map(新的MapFunction(){
@凌驾
公共对象映射(ObjectNode值)引发异常{
value.get(“字段”).as(…)
}
})

如果我有value.get(“a”).asText,那么这个数据转换的结果是什么?我觉得仅仅使用此转换无法实现我的目标。@teddy在您的示例中,您可以使用asInt()获取字段的值。您还可以将它们转换为其他格式。实际上,value.get()value的结果是JsonNode,将它们视为普通的json对象。我也意识到了这一点。但是你知道我怎么把这些信息输出给下游的卡夫卡吗?我发布了一个问题:我觉得flink在调用sink API时很难匹配签名@David@teddyDawid在几分钟前回答了你的问题:)嗨,Dawid,如果你感兴趣,你能在这篇文章中帮助我吗: