canal-php 基于 canal 的 mysql 数据库 binlog 的增量订阅 & 消费组件 php 客户端 - 文章教程

canal-php 基于 canal 的 mysql 数据库 binlog 的增量订阅 & 消费组件 php 客户端

发布于 2021-07-12 字数 3941 浏览 1273 评论 0

canal-php 是阿里巴巴开源项目。

Canal 是阿里巴巴 mysql 数据库 binlog 的增量订阅&消费组件 的 php 客户端。为 php 开发者提供一个更友好的使用 Canal 的方式。Canal 是 mysql 数据库 binlog 的增量订阅 & 消费组件。

基于日志增量订阅 & 消费支持的业务:

  1. 数据库镜像
  2. 数据库实时备份
  3. 多级索引 (卖家和买家各自分库索引)
  4. search build
  5. 业务 cache 刷新
  6. 价格变化等重要业务消息

关于 Canal 的更多信息请访问 https://github.com/alibaba/canal/wiki

应用场景

canal-php 作为 Canal 的客户端,其应用场景就是 Canal 的应用场景。关于应用场景在 Canal 介绍一节已有概述。举一些实际的使用例子:

  1. 代替使用轮询数据库方式来监控数据库变更,有效改善轮询耗费数据库资源。
  2. 根据数据库的变更实时更新搜索引擎,比如电商场景下商品信息发生变更,实时同步到商品搜索引擎 Elasticsearch、solr等
  3. 根据数据库的变更实时更新缓存,比如电商场景下商品价格、库存发生变更实时同步到redis
  4. 数据库异地备份、数据同步
  5. 根据数据库变更触发某种业务,比如电商场景下,创建订单超过xx时间未支付被自动取消,我们获取到这条订单数据的状态变更即可向用户推送消息。
  6. 将数据库变更整理成自己的数据格式发送到kafka等消息队列,供消息队列的消费者进行消费。

工作原理

canal-php 是 Canal 的 php 客户端,它与 Canal 是采用的 Socket 来进行通信的,传输协议是 TCP,交互协议采用的是 Google Protocol Buffer 3.0。

工作流程

  1. Canal 连接到 mysql 数据库,模拟 slave
  2. canal-php 与 Canal 建立连接
  3. 数据库发生变更写入到 binlog
  4. Canal 向数据库发送 dump 请求,获取 binlog 并解析
  5. canal-php 向 Canal 请求数据库变更
  6. Canal 发送解析后的数据给 canal-php
  7. canal-php 收到数据,消费成功,发送回执。(可选)
  8. Canal 记录消费位置。

canal-php 基于 canal 的 mysql 数据库 binlog 的增量订阅 & 消费组件 php 客户端

五.快速启动

安装 Canal

Canal 的安装以及配置使用请查看 https://github.com/alibaba/canal/wiki/QuickStart

构建 canal php 客户端

$ composer require xingwenge/canal_php

or

$ git clone https://github.com/xingwenge/canal-php.git
$ cd canal-php
$ composer update

建立与 Canal 的连接

try {
  $client = CanalConnectorFactory::createClient(CanalClient::TYPE_SOCKET_CLUE);
  # $client = CanalConnectorFactory::createClient(CanalClient::TYPE_SWOOLE);

  $client->connect("127.0.0.1", 11111);
  $client->checkValid();
  $client->subscribe("1001", "example", ".*\\..*");
  # $client->subscribe("1001", "example", "db_name.tb_name"); # 设置过滤

  while (true) {
    $message = $client->get(100);
    if ($entries = $message->getEntries()) {
      foreach ($entries as $entry) {
        Fmt::println($entry);
      }
    }
    sleep(1);
  }

  $client->disConnect();
} catch (\Exception $e) {
  echo $e->getMessage(), PHP_EOL;
}

canal-php 基于 canal 的 mysql 数据库 binlog 的增量订阅 & 消费组件 php 客户端

更多详情请查看 Sample

性能

本地开发环境

消费速度:sql insert 10000 事件,32 秒消耗完成。消费速度 312.5 条/s。

内存使用:4M。

项目地址:https://github.com/xingwenge/canal-php

如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

扫码加入群聊

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

目前还没有任何评论,快来抢沙发吧!

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

2583 文章
29 评论
84935 人气
更多

推荐作者

猫性小仙女

文章 1 评论 0

qq_VO6LhT

文章 0 评论 0

猿舌电影

文章 0 评论 0

7556275422

文章 0 评论 0

YYQ_139

文章 0 评论 0