我有一个物联网设备向Kafka主题发送数据,如名字、姓氏、emailid、事件时间等数据。我必须验证在流处理的定义操作窗口中没有为同一用户接收到其他事件。例如,如果我在5分钟的窗口内获取用户x的详细信息3次,我应该只处理(添加到接收器)从用户x接收的第一个数据和要丢弃的下两个记录。
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 } });
1条答案
按热度按时间nszi6y051#
最明显的解决方案是按用户数据设置事件的键,并减少它们,只留下第一个。
像这样: