Java 如何在ApacheFlink中平面映射到数据库?

Java 如何在ApacheFlink中平面映射到数据库?,java,apache-flink,flink-streaming,Java,Apache Flink,Flink Streaming,我正在使用ApacheFlink尝试从Kafka获取JSON记录到InfluxDB,并在这个过程中将它们从一个JSON记录拆分为多个InfluxDB点 我找到了flatMap转换,感觉它符合目的。核心代码如下所示: DataStream DataStream=stream.flatMap(新的flatMap函数(){ @凌驾 公共void flatMap(JsonConsumerRecord记录,收集器输出)引发异常{ 迭代器迭代器=/。。。 while(iterator.hasNext()){

我正在使用ApacheFlink尝试从Kafka获取JSON记录到InfluxDB,并在这个过程中将它们从一个JSON记录拆分为多个InfluxDB点

我找到了
flatMap
转换,感觉它符合目的。核心代码如下所示:

DataStream DataStream=stream.flatMap(新的flatMap函数(){
@凌驾
公共void flatMap(JsonConsumerRecord记录,收集器输出)引发异常{
迭代器迭代器=/。。。
while(iterator.hasNext()){
//从输入中提取点
InfluxDBPoint点=/。。。
输出。收集(点);
}
}
});
出于某种原因,我只将其中一个收集的点流式传输到数据库中

即使我打印出所有映射的条目,它似乎也能正常工作:
dataStream.print()
产生:

org.apache.flink.streaming.connectors.influxdb.InfluxDBPoint@144fd091
org.apache.flink.streaming.connectors.influxdb.InfluxDBPoint@57256d1
org.apache.flink.streaming.connectors.influxdb.InfluxDBPoint@28c38504
org.apache.flink.streaming.connectors.influxdb.InfluxDBPoint@2d3a66b3

我是否误解了flatMap,或者流入连接器中可能存在一些错误?

问题实际上与流入中的一个系列(由其标记集和测量值定义)每次只能有一个点有关,因此即使我的字段不同,最后一个点用相同的时间值覆盖了所有以前的点。

如果在打印流时看到预期的所有结果,则InfluxSink中可能有问题。但从这里显示的情况来看,似乎您正在以正确的方式使用flatmap。@TobiSH是的,我刚刚创建了InfluxSink的一个子类,可以验证所有点是否都到达
invoke
方法。因此,在这一点上,显然是一个下沉问题。