Apache flink 在flink中,如何验证给定窗口中是否未接收到相同的用户数据?

Apache flink 在flink中,如何验证给定窗口中是否未接收到相同的用户数据?,apache-flink,Apache Flink,我有一个物联网设备向卡夫卡主题发送数据,如名字、姓氏、emailId、事件时间等数据。 我必须验证在流处理的定义操作窗口中没有为同一用户接收到其他事件。 例如,如果我在5分钟的窗口内获得用户X的详细信息3次,我应该只处理(添加到接收器)从用户X收到的第一个数据和接下来要丢弃的两个记录。最明显的解决方案是按用户数据对事件进行键控,并减少它们,只留下第一个记录 大概是这样的: 数据流 .keyBy(event->event.emailId())//按emailId键 .reduce(新的Reduce

我有一个物联网设备向卡夫卡主题发送数据,如名字、姓氏、emailId、事件时间等数据。 我必须验证在流处理的定义操作窗口中没有为同一用户接收到其他事件。
例如,如果我在5分钟的窗口内获得用户X的详细信息3次,我应该只处理(添加到接收器)从用户X收到的第一个数据和接下来要丢弃的两个记录。

最明显的解决方案是按用户数据对事件进行键控,并减少它们,只留下第一个记录

大概是这样的:

数据流
.keyBy(event->event.emailId())//按emailId键
.reduce(新的ReduceFunction(){
@凌驾
公共整数缩减(事件值1、事件值2)
抛出异常{
return event1;//始终只保留第一个事件
}
});

感谢您的帮助,如何确保同一用户的事件是否出现在同一窗口中?keyBy保证具有相同密钥的所有事件将由同一任务处理。