flink sql cdc并行度问题

2021-05-24 Thread casel.chen
flink sql作业:消费mysql binlog将数据同步到 mongodb 问题: 1. mysql-cdc connector只能设置成一个并行度吗? 2. 可以增大mongodb的sink并行度吗?可以的话,要如何设置?它保证主键相同的记录会发到同一个分区sink吗?

Re: flink sql cdc并行度问题

2021-05-25 Thread Zorro
mysql-cdc connector只能设置一个并行度,主要可能有这些原因: 1. mysql binlog本质上是一个文件,多个并行度消费需要避免重复 2. 多个并行度消费难以保证顺序 sink可以设为多个并行度,但是顺序不一定,如果需要主键相同的记录发到同一个sink线程可以先做一个keyby,并且保证keyby并行度与sink并行度相同,这样基本上能够保证数据forward传输,不过也不能100%保证有序。 如果需要保证有序还是建议sink并行度为1 -- Sent from: http://apache-flink.147419.n8.nabble.com/

Re:Re: flink sql cdc并行度问题

2021-05-27 Thread casel.chen
我的作业是用flink sql消费mysql cdc binlog并实时同步到mongodb。如果只开一个并行度的话,mongodb的写入速度可能追不上mysql的写入。所以我需要在sink端开大并行度。 我不清楚用sql怎么写keyBy,是不是要group by pk呢?我原来的想法是在MongoDBSinkFunction中开一个线程池,每个线程对应下游sink的一个并行度,每个线程带一个queue,MongoDBSinkFunction根据数据PK往对应的queue发数据,每个消费者线程从自己的queue pull数据再进行批量插入。不知道这样可不可行?

Re: Re:Re: flink sql cdc并行度问题

2021-05-28 Thread Zorro
如果你是自己实现MongoDB sink的话,你描述的方法看起来是可行的,不过这种实现方式相对比较复杂。 sql keyby可以考虑使用flink提供的 Deduplication 功能。这样的话MongoDB sink就可以开多个并行度,而不用考虑不同key的顺序问题了 -- Sent from: http://apache-flink.147419.n8.nabble.