使用 cancal 异步 es 数据延迟太大怎么办

2021-10-28 15:28:14 +08:00
 Saxton

目前使用 cancal 配合 adapter 把 mysql 数据异步到了 es ,但是我在新增数据和修改数据后,拿到的数据是 更新前的数据,后面我修改了源码,强行带上了?refresh=wait_for ,但是效果还是很差,新增时可以拿到最新了,但是修改还是不行

2058 次点击
所在节点    Elasticsearch
11 条回复
defunct9
2021-10-28 15:32:26 +08:00
我记得有 mysql 的 adapter ,直接送入 ES
Saxton
2021-10-28 15:37:57 +08:00
@defunct9 我就是用的这个,看来只能将写入 es 数据的代码一块耦合到业务代码里了,哎
kidlj
2021-10-28 16:18:18 +08:00
试试 Kafka + Debezium ?我的使用经验是无延迟。

BTW, Friends don't let friends do dual writes.
pengtdyd
2021-10-28 16:52:34 +08:00
cancal 我用过,但是感觉不是很成熟,不知道你们有没有部署过高可用版本,整体使用感受就是特别像 kpi 项目,cancal 的文档我看了好几遍,就文档本身而言写的挺清晰的,但是写的比较分散。就公司内部使用来看,运维成本也比较高,小公司基本上要用的话,没有深入研究过的人,基本上是抓瞎。maxwell 没有高可用版本,这个不建议使用,国外用 Debezium 的多,我对他不是特别了解,没玩过。
testtest1987
2021-10-29 10:05:40 +08:00
我用的 canal 1.1.3,延迟感觉还行啊,难道是我 DB 压力太小了?
主 MySQL->从 MySQL->Canal->MQ->Java 数据处理->ES
Saxton
2021-10-29 11:12:51 +08:00
@pengtdyd 是的 完全就一个 KPI 项目,不知道你有没有去阅读过里面的代码, 我到现在已经修了三个 BUG 了, 里面那些代码完全就是可读性为 0
Saxton
2021-10-29 11:13:37 +08:00
@testtest1987 用的是哪一个 MQ 呢,我感觉是我 es 的问题 我分配的内存太小了 数据其实已经过去了 但刷出来的时候太慢了
Aresxue
2021-10-29 11:27:15 +08:00
refresh=wait_for 还是别加了。。,默认 1s 刷新还是能够满足伪实时诉求的,加了之后对整个 es 的负荷更多反而更加影响性能,用 canal 的话就作为一个 binlog 的采集器好了,自带的 adapter 限制和 bug 太多了。。我这边都是 canal 集群->RocketMQ 集群->多 java 应用进程->ES 集群,慢在哪一步也更好分析,目前你这样感觉要筛查下 binlog 自身的延时,还有 es 的写入频率可能要做适当的调整
testtest1987
2021-10-29 15:05:36 +08:00
@Saxton RocketMQ. 推送到 RocketMQ 应该是用的自带功能,之前是用 Java 解析后直接推 ES,但有个问题导致数据堆积,Cancel 挂了,后来出了个新版本,自带推送到 RocketMQ / Kafka,就直接用了
wbd31
2021-11-10 17:24:33 +08:00
@Aresxue 云厂商的 es 默认 refresh_interval 不一定是 1s...
Aresxue
2021-11-17 13:00:01 +08:00
@wbd31 这个核心参数一般都会修改的,使之更契合自己的业务,比如阿里的 adb ,应该说官方默认的是 1s 。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/811278

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX