Ok it's not my data either. I think it may be a volume issue. I have managed to consistently reproduce the error. I'll upload a reproducer ASAP.
On Thu, 3 Feb 2022 at 15:37, John Smith <java.dev....@gmail.com> wrote: > Ok so I tried to create a reproducer but I couldn't reproduce it. But the > actual job once in a while throws that error. So I'm wondering if maybe one > of the records that comes in is not valid, though I do validate prior to > getting to the key and window operators. > > On Thu, 3 Feb 2022 at 14:32, John Smith <java.dev....@gmail.com> wrote: > >> Actually maybe not because with PrintSinkFunction it ran for a bit and >> then it threw the error. >> >> On Thu, 3 Feb 2022 at 14:24, John Smith <java.dev....@gmail.com> wrote: >> >>> Ok it may be the ElasticSearch connector causing the issue? >>> >>> If I use PrintSinkFunction then I get no error and my stats print as >>> expected. >>> >>> On Wed, 2 Feb 2022 at 03:01, Francesco Guardiani < >>> france...@ververica.com> wrote: >>> >>>> Hi, >>>> your hash code and equals seems correct. Can you post a minimum stream >>>> pipeline reproducer using this class? >>>> >>>> FG >>>> >>>> On Tue, Feb 1, 2022 at 8:39 PM John Smith <java.dev....@gmail.com> >>>> wrote: >>>> >>>>> Hi, getting java.lang.IllegalArgumentException: Key group 39 is not in >>>>> KeyGroupRange{startKeyGroup=96, endKeyGroup=103}. Unless you're directly >>>>> using low level state access APIs, this is most likely caused by >>>>> non-deterministic shuffle key (hashCode and equals implementation). >>>>> >>>>> This is my class, is my hashCode deterministic? >>>>> >>>>> public final class MyEventCountKey { >>>>> private final String countDateTime; >>>>> private final String domain; >>>>> private final String event; >>>>> >>>>> public MyEventCountKey(final String countDateTime, final String >>>>> domain, final String event) { >>>>> this.countDateTime = countDateTime; >>>>> this.domain = domain; >>>>> this.event = event; >>>>> } >>>>> >>>>> public String getCountDateTime() { >>>>> return countDateTime; >>>>> } >>>>> >>>>> public String getDomain() { >>>>> return domain; >>>>> } >>>>> >>>>> public String getEven() { >>>>> return event; >>>>> } >>>>> >>>>> @Override >>>>> public String toString() { >>>>> return countDateTime + "|" + domain + "|" + event; >>>>> } >>>>> >>>>> @Override >>>>> public boolean equals(Object o) { >>>>> if (this == o) return true; >>>>> if (o == null || getClass() != o.getClass()) return false; >>>>> MyEventCountKey that = (MyEventCountKey) o; >>>>> return countDateTime.equals(that.countDateTime) && >>>>> domain.equals(that.domain) && >>>>> event.equals(that.event); >>>>> } >>>>> >>>>> @Override >>>>> public int hashCode() { >>>>> final int prime = 31; >>>>> int result = 1; >>>>> result = prime * result + countDateTime.hashCode(); >>>>> result = prime * result + domain.hashCode(); >>>>> result = prime * result + event.hashCode(); >>>>> return result; >>>>> } >>>>> } >>>>> >>>>>