V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Saxton
V2EX  ›  Elasticsearch

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

  •  
  •   Saxton · 2021-10-28 15:28:14 +08:00 · 2026 次点击
    这是一个创建于 901 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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