You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user-zh@flink.apache.org by "casel.chen" <ca...@126.com> on 2021/05/25 03:51:27 UTC
flink sql cdc并行度问题
flink sql作业:消费mysql binlog将数据同步到 mongodb
问题:
1. mysql-cdc connector只能设置成一个并行度吗?
2. 可以增大mongodb的sink并行度吗?可以的话,要如何设置?它保证主键相同的记录会发到同一个分区sink吗?
Re: Re:Re: flink sql cdc并行度问题
Posted by Zorro <li...@gmail.com>.
如果你是自己实现MongoDB sink的话,你描述的方法看起来是可行的,不过这种实现方式相对比较复杂。
sql keyby可以考虑使用flink提供的 Deduplication
<https://ci.apache.org/projects/flink/flink-docs-release-1.13/docs/dev/table/sql/queries/deduplication/>
功能。这样的话MongoDB sink就可以开多个并行度,而不用考虑不同key的顺序问题了
--
Sent from: http://apache-flink.147419.n8.nabble.com/
Re:Re: flink sql cdc并行度问题
Posted by "casel.chen" <ca...@126.com>.
我的作业是用flink sql消费mysql cdc binlog并实时同步到mongodb。如果只开一个并行度的话,mongodb的写入速度可能追不上mysql的写入。所以我需要在sink端开大并行度。
我不清楚用sql怎么写keyBy,是不是要group by pk呢?我原来的想法是在MongoDBSinkFunction中开一个线程池,每个线程对应下游sink的一个并行度,每个线程带一个queue,MongoDBSinkFunction根据数据PK往对应的queue发数据,每个消费者线程从自己的queue pull数据再进行批量插入。不知道这样可不可行?
在 2021-05-26 14:22:11,"Zorro" <li...@gmail.com> 写道:
>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: flink sql cdc并行度问题
Posted by Zorro <li...@gmail.com>.
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/