一次异构数据库golang落地实现

做完这次golang项目后,最大的体验是从php转go是真的头皮发麻,原因大于强类型语言到处类型需要关注,但是习惯了就好了

这次做的项目主要是异构mysql数据库到clickhouse进行数据分析统计

image.png

golang之canal知识点

  • https://github.com/withlin/canal-go //客户端golang-canal包

  • 怎样确保数据的一致性,此时应该使用golang-canal包中的一个commit功能和rollback的功能,需要注意的是rollback实际是生效的但是bachId是不体现在这里,打印数据就知道了

golang 之kafka功能

  • 使用segmentio/kafka-go包处理同时实现了消费确认和sasl功能,在这次开发中差点载跟斗了,因为临时上线才说要用阿里云此时用的是公网ip【而阿里云的golang-kafka-sdk一言难尽各种坑爹】,因此需要验证权限,官网在这个描述得不太明晰因此在github找到了解决方案,
dialer := &kafka.Dialer{
      Timeout:   10 * time.Second,
      DualStack: true,
      TLS: &tls.Config{
         InsecureSkipVerify: true,
      },
      SASLMechanism: plain.Mechanism{
         Username: "xxxx",
         Password: "xxx",
      },
   }
//核心代码就是这段来验证阿里云的kafka
  • kafka消费确认是需要group id的如果本地没有配置那么消费确认则会报错,如果要成功 必须要在create topic时候带上topic
  • 这里描述docker容器带topic的方法
    • 找到kafka的容器,进入/opt/bitnami/kafka/bin
    • kafka-console-consumer.sh --bootstrap-server 容器ip:端口 --topic mytopic --consumer-property group.id=mygroup

但是如果买阿里云其实是不存在配group id那么麻烦,因此根据自己测试的来

  • golang之clickhouse

  • 起初用的不是gorm那操作入库那是特别的麻烦

  • 后来引入clickhouse-gorm妈妈再也不担心我

  • clickhouse使用的mergetree是不会对数据进行删除的而是修改sign为-1,当执行Final后则会自动折叠-1的只保留1的

上面是大概的整个业务的整个过程的思路,中间还会有很多功能点,如果有同样的业务,或许可以借鉴

你可能感兴趣的:(一次异构数据库golang落地实现)