利用Logstash实现ES和MySQL同步

利用logstash实现ES和MySQL同步

1. ES和MySQL同步方法


  1. 编程式

    • 使用之前的elasticdump,手动变成生成json文件,编写shellscript导入ES。后续的数据新增使用PHP或kava客户端进行编程触发同步。
  2. 使用插件(没有什么特别好的插件)

    • 国人编写的go-mysql-elasticsearch(go开发)
    • 官方推荐基于logstash的插件logstash-input-jdbc
  3. 自己写

    • 采用阿里巴巴的一个开源项目canal,可以模拟mysql从服务器。封装了bin-log分析,我们可以自己开发一个客户端可以更好地控制数据同步。

2. logstash-input-jdbc同步方法


  1. 下载mysql+java驱动包:https://dev.mysql.com/downloads/connector/j/

  2. 配置文件

    	input {
    	  jdbc {
    	    jdbc_driver_library => "mysql-connector-java-5.1.36-bin.jar"
    	    jdbc_driver_class => "com.mysql.jdbc.Driver"
    	    jdbc_connection_string => "jdbc:mysql://localhost:3306/mydb"
    	    jdbc_user => "mysql"
    	    parameters => { "favorite_artist" => "Beethoven" }
    	    schedule => "* * * * *"
    	    statement => "SELECT * from songs where artist = :favorite_artist"
    	  }
    	}
    
  3. 准备数据,创建mysql表jt_news

    	CREATE TABLE `jt_news` (
    	  `news_id` int(11) NOT NULL AUTO_INCREMENT,
    	  `news_title` varchar(64) DEFAULT NULL,
    	  `news_abstract` varchar(64) DEFAULT NULL,
    	  `news_updatetime` datetime DEFAULT NULL,
    	  `news_clicknum` int(3) DEFAULT NULL,
    	  `news_class` varchar(64) DEFAULT NULL,
    	  PRIMARY KEY (`news_id`)
    	) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
    
    	INSERT INTO `jt_news` VALUES (1,'Java开发新闻','Java新闻摘要','2017-09-28 11:14:49',11,'编程语言'),(2,'PHP开发新闻','PHP新闻摘要','2017-09-28 11:15:13',13,'web开发'),(3,'js前后端分离','javascript','2017-09-28 11:15:38',1,'web开发');
    
  4. 创建索引(mapping)

    	PUT jtthink-test
    	{
    	  "mappings": {
    	    "jt_news": {
    	      "properties": {
    	        "news_title": {
    	          "type": "text",
    	          "analyzer": "ik_max_word"
    	        },
    	        "news_abstract": {
    	          "type": "text",
    	          "analyzer": "ik_max_word"
    	        },
    	        "news_updatetime": {
    	          "type": "date"
    	        },
    	        "news_clicknum": {
    	          "type": "integer"
    	        },
    	        "news_class": {
    	          "type": "keyword"
    	        }
    	      }
    	    }
    	  }
    	}
    
  5. 创建配置文件 mysql.conf

    • 在logstash/bin下创建(该目录可变)

    • 文件内容

      	input {
      	  jdbc {
      	    jdbc_driver_library => "/usr/local/drivers/mysql-connector-java-5.1.44/mysql-connector-java-5.1.44-bin.jar"
      	    jdbc_driver_class => "com.mysql.jdbc.Driver"
      	    jdbc_connection_string => "jdbc:mysql://localhost:3306/jtthink"
      	    jdbc_user => "root"
      	    jdbc_password => "shadowolf1995."
      	    statement => "SELECT * from jt_news order by news_id desc"
      	    tracking_column => "news_updatetime"
      	    tracking_column_type => "timestamp"
      	    schedule => "* * * * *"
      	  }
      	}
      
      	filter {
      
      	}
      
      	output {
      		stdout {
      			codec => rubydebug
      		}
      		elasticsearch {
      			hosts => ["127.0.0.1:9201"]
      			index => "jtthink-test"
      			document_id => "%{news_id}"
      		}
      	}
      
  6. 启动logstash

    	./logstash -f mysql.conf
    
  7. 使用kibana创建index jtthink-test,查看数据。

转载于:https://my.oschina.net/shadowolf/blog/1586193

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值