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

tmb3ates  于 2021-06-21  发布在  Flink
关注(0)|答案(1)|浏览(240)

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

nszi6y05

nszi6y051#

最明显的解决方案是按用户数据设置事件的键,并减少它们,只留下第一个。
像这样:

dataStream
    .keyBy(event -> event.emailId()) // Key by emailId
    .reduce(new ReduceFunction<Event>() {
        @Override
        public Integer reduce(Event value1, Event value2)
         throws Exception {
            return event1; // always leave only first event
        }
    });

相关问题