Leonid Ilyevsky created FLINK-18770:
---------------------------------------

             Summary: Emitting element fails in KryoSerializer
                 Key: FLINK-18770
                 URL: https://issues.apache.org/jira/browse/FLINK-18770
             Project: Flink
          Issue Type: Bug
    Affects Versions: 1.11.1
         Environment: Flink 1.11.1, Linux
            Reporter: Leonid Ilyevsky
         Attachments: KryoException.txt, SolaceSource.java

I wrote a simple Flink connector for Solace, see attached java file. It works 
fine under local execution environment. However, when I deployed it in the real 
Flink cluster, it failed with the Kryo exception, see attached.

After a few hours of search and debugging, I can see now what is going on.

The data I want to emit from this source is a simple byte array. In the 
exception stack you can see that when I call 'collect' on the context, it goes 
into OperatorChain.java:715, and then to KryoSerializer, where it ultimately 
fails. I didn't have a chance to learn what KryoSerializer is and why it would 
not know what to do with byte[], but that is not the point now.

Then I used debugger in my local test, in order to figure out how it manages to 
work. I saw that after OperatorChain.java:715 it goes into 
BytePrimitiveArraySerializer, and then everything is working as expected. 
Obviously BytePrimitiveArraySerializer makes sense for byte[] data.

The question is, how can I configure the execution environment under cluster so 
that it does serialization the same way as the local one? I looked at 
[https://ci.apache.org/projects/flink/flink-docs-stable/dev/execution_configuration.html]
 , and I was thinking of setting disableForceKryo, but it says it is disabled 
by default anyway.

 

Another question is, why cluster execution environment has different default 
settings compare to local? This makes it difficult to rely on local tests.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to