pump和drain 是如何交互的,通过什么进行连接的

image image
drain是通过 `这个参数 detect-interval = 10 向PD查询pump产生的日志吗?

  1. 参考官方文档了解一下

Pump 用于实时记录 TiDB 产生的 Binlog,并将 Binlog 按照事务的提交时间进行排序,再提供给 Drainer 进行消费;

Drainer 从各个 Pump 中收集 Binlog 进行归并,再将 Binlog 转化成 SQL 或者指定格式的数据,最终同步到下游
https://pingcap.com/docs-cn/stable/reference/tidb-binlog/overview/

  1. detect-interval : 向 PD 查询在线 Pump 的时间间隔

如果我pump和drain部署在不同的机器上面,因为我在drain或者pump的配置文件上面没有发现指定对方的存在位置,如果pump是个集群,那就会有多个机器的多个日志路径,那drain是如何知道我的pump集群产生的日志在哪?是pump集群向PD注册自己的日志所在路径,drain向PD获取日志路径信息这样吗?我的使用场景是想把drain部署到客户那边,客户那边对于我们来说是个黑盒,可以给我们开放一个对外的端口,这种场景可以使用吗?

你好,

drainer 从各个 Pump 中收集 Binlog ,元信息都是保存在 pd 中的。

tidb-binlog 传输也是需要网络的,如果与客户环境存在跨机房情况需要评估下延迟

https://book.tidb.io/session2/chapter2/why-cdc.html

后面可以关注下 ticdc

嗯嗯,那这样的话我把drain(可以访问下游数据库)部署到一台只能访问tidb集群PD的机器上面,是不是就可以从源库拿binlog文件到drain多在的机器上面,就可以完成同步。

你好,

这是基本的环境要求,tidb 各组件之间需要免密互信,可以实操看下体验下。
https://pingcap.com/docs-cn/stable/reference/tidb-binlog/deploy/

新版本可以使用 tiup 部署

drain和tidb集群也需要免密互信吗?我试过了本地多机器之间的服务。drain和pump之间的通信,是不是是 drain自己去拉取的数据,不是pump推给drain的!

你好,

tidb-binlog 中并没有严格意义的 推和拉 数据,都是根据批次的状态和 pd 信息进行数据传输和确认的,

部署 tidb-lightning 时会进行类似的检测