返回介绍

高可用

发布于 2021-07-07 22:48:03 字数 4101 浏览 1001 评论 0 收藏 0

这里的高可用分为两类,客户端集群和服务端集群。都是采用冷备模式,因为对于 binlog 数据消费来说,并行处理将会带来数据顺序错乱的问题,当然你可以通过一些复杂的机制去实现,这里不做说明。集群部署需要 Zookeeper。

服务端集群

conf/canal.properties 文件中修改 zookeeper 地址

canal.zkServers=127.0.0.1:2181

集群中每个实例需,配置相同的 zookeeper 地址。

参考官方文档:AdminGuide|QuickStart

客户端集群

客户端集群和服务端集群采用相同的模式,每个实例去抢占锁,获得了锁那么这个实例就运行获取数据,其他实例做冷备。

若正在运行消费数据的实例由于网络波动,导致和 zookeeper 失去连接,那么其他客户端实例不会立即抢占,会等待 60s 后才执行抢占,给与这个实例恢复的机会。

客户端集群使用的连接对象和快速入门中的不同:ClusterCanalConnection,但使用方法基本相同。

示例:

//初始化日志
var loggerFactory = LoggerFactory.Create(builder =>
            {
                builder
                    .AddFilter("Microsoft", LogLevel.Debug)
                    .AddFilter("System", LogLevel.Information)
                    .AddConsole();
            });

var logger = loggerFactory.CreateLogger<Program>();
//设置zk地址和clientid,统一集群的client必须相同
var conn = new ClusterCanalConnection( new ClusterCanalOptions("localhost:2181", "12350")
//连接到Server                                      loggerFactory);
await conn.ConnectAsync();
//订阅
await conn.SubscribeAsync();
await conn.RollbackAsync(0);
while (true)
{
    try
    {
        //获取数据
        var msg = await conn.GetAsync(1024);
    }
    catch (Exception e)
    {
        _logger.LogError(e,"Error.");
        //发生异常执行重连,此方法只有集群连接对象才有
        await conn.ReConnectAsync();
    }

}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文