乐趣区

关于elasticsearch:ElasticSearch数据同步Logstash多表批量

前言:

上一篇文章也简略的介绍了 Logstash 同步 MySQL 到 ElasticSearch。批量同步虽说就配置文件不一样,然而实际操作的时候,也还会遇到不少的问题,比方 reader 不容许特殊字符 (0x0) 等等。上面也次要以几个问题来演示批量同步的过程,以及启动命令时如何排查报错的办法。

批量同步配置:

input {stdin {}
    
    jdbc {
    
      # mysql 数据库链接,shop 为数据库名
      jdbc_connection_string => "jdbc:mysql://127.0.0.1:3306/rebuild?characterEncoding=UTF-8&useSSL=false"
      
      # 用户名和明码
      jdbc_user => "root"
      jdbc_password => "root"
      
      # 驱动
      jdbc_driver_library => "E:/2setsoft/1dev/logstash-7.8.0/mysqletc/mysql-connector-java-5.1.7-bin.jar"
      
      # 驱动类名
      jdbc_driver_class => "com.mysql.jdbc.Driver"
      
      jdbc_paging_enabled => "true"
      jdbc_page_size => "50000"
      
      parameters => {"number" => "200"}
      
      # 执行的 sql 文件门路 + 名称
      #statement_filepath => "E:/2setsoft/1dev/logstash-7.8.0/mysqletc/user.sql"
      
      statement => "SELECT * FROM `hhyp_article` WHERE delete_time = 0"
      
      # 是否将字段名转换为小写,默认 true(如果有数据序列化、反序列化需要,倡议改为 false);lowercase_column_names => false
        
      # Value can be any of: fatal,error,warn,info,debug,默认 info;sql_log_level => warn
        
        
      # 是否记录上次执行后果,true 示意会将上次执行后果的 tracking_column 字段的值保留到 last_run_metadata_path 指定的文件中;record_last_run => true
        
      # 须要记录查问后果某字段的值时,此字段为 true,否则默认 tracking_column 为 timestamp 的值;use_column_value => true
         
      # 须要记录的字段,用于增量同步,需是数据库字段
      tracking_column => "ModifyTime"
        
      # Value can be any of: numeric,timestamp,Default value is "numeric"
      tracking_column_type => timestamp

      # record_last_run 上次数据寄存地位;last_run_metadata_path => "E:/2setsoft/1dev/logstash-7.8.0/mysqletc/last_id.txt"
        
      # 是否革除 last_run_metadata_path 的记录,须要增量同步时此字段必须为 false;clean_run => false
      
      # 设置监听距离  各字段含意(由左至右)分、时、天、月、年,全副为 * 默认含意为每分钟都更新
      schedule => "* * * * *"
      
      # 索引类型
      type => "article"
    }
    
    jdbc {
    
      # mysql 数据库链接,shop 为数据库名
      jdbc_connection_string => "jdbc:mysql://127.0.0.1:3306/rebuild?characterEncoding=UTF-8&useSSL=false"
      
      # 用户名和明码
      jdbc_user => "root"
      jdbc_password => "root"
      
      # 驱动
      jdbc_driver_library => "E:/2setsoft/1dev/logstash-7.8.0/mysqletc/mysql-connector-java-5.1.7-bin.jar"
      
      # 驱动类名
      jdbc_driver_class => "com.mysql.jdbc.Driver"
      
      jdbc_paging_enabled => "true"
      jdbc_page_size => "50000"
      
      parameters => {"number" => "200"}
      
      # 执行的 sql 文件门路 + 名称
      #statement_filepath => "E:/2setsoft/1dev/logstash-7.8.0/mysqletc/goods_class.sql"
      
      statement => "SELECT * FROM `hhyp_article_cate` WHERE delete_time = 0"
      
      # 是否将字段名转换为小写,默认 true(如果有数据序列化、反序列化需要,倡议改为 false);lowercase_column_names => false
        
      # Value can be any of: fatal,error,warn,info,debug,默认 info;sql_log_level => warn
      
      # 设置监听距离  各字段含意(由左至右)分、时、天、月、年,全副为 * 默认含意为每分钟都更新
      schedule => "* * * * *"
      
      # 索引类型
      type => "article_cate"
    }
    
}
 
filter {
    json {
        source => "message"
        remove_field => ["message"]
    }
}
 
output {if[type] == "article" {
        elasticsearch {hosts => ["127.0.0.1:9200"]
            index => "hhyp_article"
            document_id => "%{id}"
        }
    }
    
    if[type] == "article_cate" {
        elasticsearch {hosts => ["127.0.0.1:9200"]
            index => "hhyp_article_cate"
            document_id => "%{id}"
        }
    }
    
    stdout {codec => json_lines}
}

注意事项:

1. 索引 type。

ES 从 6 版本后一个索引下不能有多个 type,所以在多张表同步时,最好一张表建设一个索引。所以在每个 jdbc 里 type 指定了一个名称。能够拿该名称在 output 时做判断。

2. logstash_jdbc_last_run 贮存地位。

logstash_jdbc_last_run 是一个用来记录最初一次进行同步的工夫节点,为了下一次增量同步的条件。如果不在配置中显式设置,默认是在系统盘的用户目录下。如果是 windows,比方是我的是 C:\Users\Administrator.logstash_jdbc_last_run,设置形式在下面代码里也有阐明,如果自行设置须要在指定目录下创立一个 TXT 文件,执行结束后也会贮存最初同步的工夫节点。

捕获谬误形式:

1. 命令面板查看。

这种形式是在命令通过 bin\logstash -f mysqletc\mysql.conf 启动时抛出的谬误,在滚动的面板中次要查看 ERROR 行列。

2. 日志查看。

日志地位,logstash 根目录 >logs。外面不光有启动时抛出的谬误日志还有运行的慢日志,能够解压一个带 plain 的日志,关上文件就能够查看到运行过程中的日志信息了,如下就是谬误地位的提醒语。

谬误解决办法:

1. ‘reader’ unacceptable code point ‘ ‘ (0x0) special characters are not allowed    
这个谬误是某个文件中存在特殊字符,而在启动命令后,次要读取的除了 conf 配置文件和 SQL 执行指令就是 logstash_jdbc_last_run 了。排除了配置和 SQL 指令和之前一摸一样,所以问题就是默认在 C:\Users\Administrator\ 下的.logstash_jdbc_last_run 了,所以只须要删掉再重新启动就能够了。

2. <LogStash::ConfigurationError: Must set either :statement or :statement_filepath. Only one may be set at a time.>     
这个谬误就很显著了,statement 和 statement_filepath 这两个配置项只能有一个。因为都是用于执行 SQL 指令的,一个是放在独立的文件中,用于繁冗的查问指令,而另一个是放在同步配置文件中。所以只需删掉或正文掉其中一项就能够了。

退出移动版