logstash增量同步mysql数据至kafka实践

一、windows环境

  1. 安装logstash:https://artifacts.elastic.co/downloads/logstash/logstash-5.5.0.zip 解压即可
  2. 测试安装是否成功:logstash -e 'input { stdin { } } output { stdout {} }' (在解压目录bin下)
  3. 安装logstash-input-jdbc插件 :
  1. 、修改Gemfile文件下镜像地址为https://gems.ruby-china.org或者https://ruby.taobao.org
  2. 、进入bin目录下,执行logstash-plugin install logstash-input-jdbc(若出现错误则执行logstash-plugin install --no-verify logstash-input-jdbc)
  1. 同步mysql数据到kafka:
  1. 、新建配置文件XXX.conf
  2. 、添加配置(详情见附件)
  3. 运行logstash -f xxx.conf启动

 

 

  • Linux环境

 

  1. 安装logstash:wget https://artifacts.elastic.co/downloads/logstash/logstash-5.5.0.zip
  2. 下载完之后:unzip logstash-5.5.0.zip 之后将文件移动到自己存放的目录即可。
  3. 测试一下是否安装成功:cd bin ./logstash -e 'input { stdin { } } output { stdout {} }' 如图

4、安装logstash-input-jdbc插件 :

(1)、修改Gemfile文件下镜像地址为https://gems.ruby-china.org/或者https://ruby.taobao.org/

(2)、进入bin目录下,执行logstash-plugin install logstash-input-jdbc(若出现错误则执行logstash-plugin install --no-verify logstash-input-jdbc)

5、同步mysql数据到kafka:

(1)、新建配置文件XXX.conf

(2)、添加配置(详情见附件)

(3)运行./logstash -f xxx.conf启动,如下图:

 

logstash对于数据对接很强大 ,比如集群日志集中存储方便管理以及查问题,我用到的业务场景是用户的操作记录日志分析,因为分析这边是大数据的范围,涉及到流式计算等问题,相较于分库分表的mysql,kafka显然更为切合场景,以下为配置文件详情:

input {
    jdbc {
      jdbc_connection_string => "jdbc:mysql://172.0.0.1:3306/test"
      jdbc_user => "shen"
      jdbc_password => "shenyanwei"
      jdbc_driver_library => "/data/logstash/mysql-connector-java-5.1.6.jar"
      jdbc_driver_class => "com.mysql.jdbc.Driver"
      statement => "SELECT tab1.*,tab2.action,tab2.chname,tab2.flag,tab2.relation_page,tab2.system,tab2.type,tab2.uri,tab3.cnName,tab3.email,tab3.orgCode from BEHAVIOR_RECORD tab1 LEFT JOIN BEHAVIOR_MAPPING tab2 ON  tab1.action_id=tab2.id LEFT JOIN USER tab3 ON tab1.ops_user=tab3.name where tab1.id > :sql_last_value  order by tab1.id"
	  use_column_value => true
      tracking_column => "id"        
      tracking_column_type => "numeric"
      record_last_run => true
    #此配置指定上面cloumn增量条件列值存放位置,记得给初始值如:--- 0
      last_run_metadata_path => "/data/logstash/number.log"
	  schedule => "* * * * *"
	  type => "jdbc"
        

    }
 此处多数据源省略。。。。
}

filter {
  date {
    match => [ "start_time", "yyyy-MM-dd HH:mm:ss" ]
    timezone => "Asia/Shanghai"
  }
  date {
    match => [ "end_time", "yyyy-MM-dd HH:mm:ss" ]
    timezone => "Asia/Shanghai"
  }
}

 output {
     stdout {
        codec => json_lines
    }
	file {
            path => "/data/logstash/file.log"
    }
   kafka {
        kafka topic
        topic_id => "test"
        #kafka地址
       bootstrap_servers => "localhost:9092"
        #json交互
        codec => "json"
        client.id
        client_id => "test2"
	}
 }

中途值得注意的是logstash不同版本对于jdk版本有不同要求,高版本的需要jdk1.8才行,另外高版本的logstash貌似已经集成logstash-input-jdbc插件,故而安装步骤高版本可以省略

以上为本人实践记录,大家可以在有困难时参考一二,有不对的地方也欢迎指正交流,共同进步

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值