1. 需求
需要把 mysql 的数据聚合同步到 es 以提供海量数据检索能力
2. 解决方案
- 变更 mysql 数据时同步调用 es 的 api
- 变更 mysql 数据时异步调用 es 的 api(先发送消息到消息队列,搜索微服务调用 es 的 api 消费数据)
- canal 监听 mysql 的 binlog 日志,再同步到 es
- flink-cdc 监听 mysql 的 binlog 日志同步到 es
3. 选用方案
最终选择 flink-cdc 的方案,一是 go-canal 的仓库不活跃,就三个 issue,提了 bug 也没人修,而且后续可能有实时分析的大数据需求,本身就有 flink 集群的需求。 二是 canal 的 release 版本要最近才会更新,最后一次更新是 21 年 4 月,害怕烂尾。三是俺尝试部署 canal,最后失败了 💦。
4. 部署环境
选用 docker-compose 部署 mysql、link 与 elasticsearch
|
|
其中 mysql 挂载的配置文件内容
|
|
主要是为了开启 binlog
5. 配置
先启动集群
|
|
检查 binlog 是否开启
|
|
下载 mysql、es 的 connector 并拷贝到容器内部
|
|
6. 测试
进入 mysql 容器/连接 mysql 创建 mysql 数据库表
|
|
进入 jobmanager 容器
|
|
访问 kibana 查询 es 数据
|
|