logstash 和 canal的区别,个人理解

1、在传输上,两者都可以看做传输数据的管道,但logstash可以从数据库读取数据(例:MySql),传输到ES中,而canal能做到的不止这些,它可以把MySql的数据读取出来,配合java代码(貌似只支持java),将读取到的数据存储到任何代码能操作的地方,例如:文件、MySql、Redis、ES等等
    2、在时效性上,logstash配置文件是使用定时器去同步数据,而canal是监听MySql的binlog日志,进而做到数据几乎实时同步(PS:实际开发中基本是1秒~2秒内)
    3、在数据处理上,logstash可以读取多个表,然后分别存储到对应节点,或者可以在存储前进行联表查询,进而存储成一条数据。但当联表查询一对多时,存储成一条数据就变得不现实了,比如:文章搜索,并且连文章对应的评论一起搜索出来。如果用logstash的话,可能需要存成两张表,先根据条件搜索文章表,然后再循环查到的文章列表,再查询评论表,再拼装成数据,接口返回结果。
        但如果用canal的话,在数据存储到ES前,可以先把对应的评论查询出来,并且拼装成json字符串,当做文章表的单个字段存储到ES中,这样可以直接查询出来,避免反复地查询ES组装数据。在这一点上,理论上用canal查询会更快,更高效。
    4、在对数据库的压力上,logstash的原理是定时扫描变动的表,所以对数据库有一定压力,并且如果有其他程序在进行某条语句更新,锁住了这条行数据,那logstash读取数据时,就会被“卡住”,如果这个时间过长,可能会影响服务器卡死。而canal由于是监听的binlog日志,所以几乎对MySql没有压力,并且binlog已经记录,不会存在数据变动的情况。
    5、读取数据上,logstash可以读取数据库、文本文件,而canal读取的是binlog文件(binlog属于二进制文件)。
    6、学习成本上,logstash相对简单,canal相对难一点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值