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;
>>>>>     }
>>>>> }
>>>>>
>>>>>

Reply via email to