[ 
https://issues.apache.org/jira/browse/FLINK-29647?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17620854#comment-17620854
 ] 

Zhu Zhu commented on FLINK-29647:
---------------------------------

[~jackin853] I think you are right that is is a known issue of kryo 2.24.0.
However, it's not easy to upgrade kryo, see 
https://lists.apache.org/thread/vyov944och394lql76zb3myf2g140fdw.
Therefore, I would suggest to implement serializers for your classes to not let 
its serializations fallback to kryo to avoid such issues.

> report stackoverflow when using kryo
> ------------------------------------
>
>                 Key: FLINK-29647
>                 URL: https://issues.apache.org/jira/browse/FLINK-29647
>             Project: Flink
>          Issue Type: Bug
>          Components: API / Type Serialization System
>    Affects Versions: 1.13.2
>         Environment: flink 1.13.2 version (kryo 2.24 version)
>            Reporter: Gao Fei
>            Priority: Major
>              Labels: KryoSerializer
>
> When using kryo to report stackoverflow, the error is as follows:
> {code:java}
> java.lang.StackOverflowError at 
> com.esotericsoftware.kryo.Generics.getConcreteClass(Generics.java:43) at 
> com.esotericsoftware.kryo.Generics.getConcreteClass(Generics.java:44) at 
> com.esotericsoftware.kryo.Generics.getConcreteClass(Generics.java:44) at 
> com.esotericsoftware.kryo.Generics.getConcreteClass(Generics.java:44) at 
> com.esotericsoftware.kryo.Generics.getConcreteClass(Generics.java:44) at 
> com.esotericsoftware.kryo.Generics.getConcreteClass(Generics.java:44) at 
> com.esotericsoftware.kryo.Generics.getConcreteClass(Generics.java:44) at 
> com.esotericsoftware.kryo.Generics.getConcreteClass(Generics.java:44) at 
> com.esotericsoftware.kryo.Generics.getConcreteClass(Generics.java:44)
> {code}
>  I am using two-phase commit to write data to mysql, the following is part of 
> the mysql sink code:
> {code:java}
> public class MySqlTwoPhaseCommitSink extends 
> TwoPhaseCommitSinkFunction<Tuple2<String,Integer>, Connection,Void> {
>     private static final Logger log = 
> LoggerFactory.getLogger(MySqlTwoPhaseCommitSink.class);
>     public MySqlTwoPhaseCommitSink(){
>         super(new KryoSerializer<>(Connection.class,new ExecutionConfig()), 
> VoidSerializer.INSTANCE);
>     }
>     @Override
>     public void invoke(Connection connection, Tuple2<String,Integer> tp, 
> Context context) throws Exception {
>         log.info("start invoke...");
>         //TODO
>         //omit here
>     }
>     @Override
>     public Connection beginTransaction() throws Exception {
>         log.info("start beginTransaction.......");
>         String url = 
> "jdbc:mysql://localhost:3306/bigdata?useUnicode=true&characterEncoding=UTF-8";
>         Connection connection = DBConnectUtil.getConnection(url, "root", 
> "123456");
>         return connection;
>     }
>     @Override
>     public void preCommit(Connection connection) throws Exception {
>         log.info("start preCommit...");
>     }
>     @Override
>     public void commit(Connection connection) {
>         log.info("start commit...");
>         DBConnectUtil.commit(connection);
>     }
>     @Override
>     public void abort(Connection connection) {
>         log.info("start abort rollback...");
>         DBConnectUtil.rollback(connection);
>     }
> }{code}
> I also found similar problem reports: 
> https://github.com/EsotericSoftware/kryo/issues/341



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to