chaopengio / canal2hbase

2 stars 3 forks source link

some monitor module? #1

Closed boboChina closed 7 years ago

boboChina commented 7 years ago

RT

chaopengio commented 7 years ago

What's your concern?

boboChina commented 7 years ago

哥们,我担心的是canal的进程宕机,zk链接相关异常、写入阻塞(这个没用队列),写入如果出错如何回环补救,还有如何第一次初始化。等等等等

chaopengio commented 7 years ago

zk连接异常会直接导致ack不成功,在程序这边加上ack fail 的错误处理就行,数据不会丢。

写入阻塞问题需要hbase那边保证,一旦提交写入成功,客户端没法感知,不过只要写入了hbase,hbase那边都会处理,也不会丢数据。

初始化我是用sqoop直接导入元数据的,通过hbase rowkey保证数据一致性。

出现错误可以写入log中,log日志监控需要有其他模块来完成。

boboChina commented 7 years ago

帅哥,刚才我拜读了下你的程序。有几点思考望讨论下: 1、cannal那边已经是可以提供ha机制的,但是如果这个程序的ha咧 2、如果binlog输出非常快,getWithoutAck这个地方会不会有问题 3、这个程序可做部署多个作为多客户端么? 4、直接把这个改造到otter里面是否可行? ps:"通过hbase rowkey保证数据一致性 ," 这个麻烦细化一下,刚研究, 还不是很熟悉

chaopengio commented 7 years ago
  1. 我研究过canal client的ha,这是没问题的,这个程序直接部署多份,只有一份会消费数据。
  2. 这个也是没有问题的。server端只会根据现在ack到哪里,然后去binlog取,不是产生多少全取回来。
  3. 可以,监听同一个destination是HA,只有一个服务会消费数据。当然你可以改下代码,一个程序监听多个destination。不过多个服务一起启动,这个load balance我就没考虑怎么去做了。
  4. 我觉得耦合性不用这么强。

hbase 在插入数据的时候是根据rowkey来定位的,如果有了,会直接覆盖。所以先起canal server,之后再起sqoop,再起canal client,有交叉处理的部分数据会以canal client端为准。数据不会有问题。

boboChina commented 7 years ago

thx,我尝试一下先把event扔到kafka,再由多个消费端写到hbase。谢谢帅哥