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)