k8s搭建的ticdc集群任务分配不均匀

【 TiDB 使用环境】生产\测试环境\ POC
生产

【 TiDB 版本】
5.4.1

【遇到的问题】
k8s搭建的ticdc集群任务分配不均匀,一个三个节点,每个pod资源上限16c64G,只有owner节点内存压力很高,能占到30+G,其他两个节点,内存占用都是10G以下。

【复现路径】做过哪些操作出现的问题
【问题现象及影响】
【附件】

补充:
目前一共有120+个changefeed。

owner 节点的资源消耗比其它节点大是正常的。

  1. owner 节点同时存在两个角色,一个是 owner ,一个是其它节点也存在的 processor。
  2. owner 角色需要汇总和处理所有 changfeed 的信息,在内存中存储所有 changefeed 上游的 schema 信息,并且监听所有 changfeed 的 ddl 变更和 ddl 心跳,当 changefeed 的数量较多时, 它cpu 和内存的使用量较大是比较正常的。
  3. processor 角色将会承担和其它节点的 processor 一样负载。

综上所述,owner 节点资源消耗比其它节点高属于正常现象。
此外,还有一种可能是,owner 节点里面 processor 角色分配到的某张表的写入流量较大,则它可能会消耗较多的资源。

1 个赞

但是这个差距也太明显了吧。owner节点高的时候40G+,但是其余节点都是维持在10G一下。
关于changefeed里面的table,是如何负载均衡的呢?
均衡的源码在哪个文件里面呀。

帖子别沉啊 求大佬回复

CDC 现在是按照表的数量来进行负载均衡调度的,而不是根据表的流量进行负载均衡调度。因此当流量大的表被调度在 owner 节点的时候,owner 节点的资源消耗可能就会比较高。
另外一点,管理 changefeed ,并且对每个 changfeed 都维护一个 schemaStorage 是比较消耗内存的。
关于 v5.4.1 表调度的代码主逻辑在这里:https://github.com/pingcap/tiflow/blob/v5.4.1/cdc/owner/scheduler_v1.go#L71

关于 v5.4.1 owner 需要维护的 schemaStorage 的逻辑在这里:
https://github.com/pingcap/tiflow/blob/v5.4.1/cdc/owner/schema.go#L49

能麻烦说下上游 TiDB 集群的总共的库表数量吗?

上有的tidb主要使用一个数据库,库里面有1000+表。
cdc的同步 changefeed一共120+,每个changefeed监听一张表。
owner内存高的原因,是不是因为changefeed数量太高了呢?
还是说一个changefeed里面配置多张table才是合理的用法呢?

是的,多个 changefeed 会对 owner 带来较大的负担,因为对于每一个 changefeed owner 都会维护一份上游所有表的 schemaStorage,对于你的场景来说,就是 120 * 1000 = 120,000 份 tableInfo。除此之外,还有别的本来表和表之间共享的资源也会被创建多份。
对于普通的表,建议采取一个 changefeed 同步多张表的方式进行同步。
对于那些可能会产生较大事务和较大流量的表,再使用单独的 changefeed 进行同步。

我试过一个changgefeed里面监听5个table。3个节点,监听的table数量相对均匀,分配为2 2 1.
那如果一个changefeed里面监听1个table,3个节点,会优先分配到owner节点吗?

会进行均分,不会优先分配。

嗯 我正在阅读关于表均衡到capture的逻辑。
owner节点内存压力高的原因明白了。
但是另外两个节点的内存占用也是不均衡。

如下,测试环境




生产环境

另外两个节点资源不均衡就是由于表的流量不均匀造成的,你可以先看看哪张表的流量比较大,然后使用 api 调度那张表到资源消耗较低的节点上:https://docs.pingcap.com/zh/tidb/v5.4/ticdc-open-api#手动调度表到其他节点

:+1::+1::+1:

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。