運河増分同期のMySQLのデータベース情報は、ElasticSearchに使用します

この記事ではElasticSearchに運河増分同期のMySQLのデータベース情報を使用する方法について説明します。(注:インクリメンタル!!!)

1.はじめに

はじめに1.1運河

運河は、MySQLベースのバイナリログパフォーマンスデータ同期システムです。広く(含む運河アリババに使用https://www.taobao.com信頼性の低遅延データパイプ増分を提供するために、)、githubの住所:https://github.com/alibaba/canal

運河Serverは、MySQLのバイナリログを解析し、データの変更をサブスクライブし、変更が運河クライアントがデータベースやApacheのカフカなど、任意の場所にブロードキャスト実装することができます。

それは次の機能があります。

  1. すべてのサポートされるプラットフォーム。
  2. プロメテウスきめ細かな監視システムを搭載しサポート。
  3. 分析支援とGTIDにより例えば、異なる方法でのMySQLのbinlogに加入。
  4. 高性能、リアルタイムのデータ同期をサポートしています。(パフォーマンスを参照してください)
  5. 運河サーバとApache ZooKeeperのでサポートされている運河クライアントサポートHA /スケーラビリティ、
  6. ドッカーサポート。

短所:

全額の更新をサポートしていないだけ増分更新をサポートしています。

フルウィキ住所:https://github.com/alibaba/canal/wiki

どのように動作する1.2

原理は簡単です:

  1. スレーブの管アナログMySQLの対話プロトコルは、スレーブは、MySQLを装っ、及び転送プロトコルマスタMySQLサーバに送信されます。
  2. MySQLのマスターダンプ要求が受信され、バイナリログスレーブ(すなわち管)をプッシュし始めます。
  3. 運河バイナリログオブジェクトは、データのタイプ(ロー・バイトストリーム)に解決します

図示のように:

画像

1.3同期ES

運河アダプター:必要性はアダプタを使用するときにデータを同期するためのエス。最新バージョン1.1.3、ダウンロード:https://github.com/alibaba/canal/releases

一見現在サポートされているバージョン6.xをES、7.xのバージョンはサポートされていません!

2.準備

2.1 ESおよびJDK

リファレンスは、ESを搭載することができる。https://www.dalaoyang.cn/article/78

:リファレンスは、JDKインストールすることができますhttps://www.dalaoyang.cn/article/16

2.2インストール運河サーバ

canal.deployer-1.1.3.tar.gzをダウンロード

wget https://github.com/alibaba/canal/releases/download/canal-1.1.3/canal.deployer-1.1.3.tar.gz

ファイルを解凍します

tar -zxvf canal.deployer-1.1.3.tar.gz

フォルダにファイルを解凍します

cd canal.deployer-1.1.3

次へのconf /例/ instance.propertiesファイル、いくつかの主要な注意を変更します。

  • canal.instance.master.address:アドレスデータベース、たとえば127.0.0.1:3306
  • canal.instance.dbUsername:データベース・ユーザー
  • canal.instance.dbPassword:データベースパスワード

次のように完全に読み取ります。

#################################################
## mysql serverId , v1.0.26+ will autoGen
# canal.instance.mysql.slaveId=0

# enable gtid use true/false
canal.instance.gtidon=false

# position info
canal.instance.master.address=127.0.0.1:3306
canal.instance.master.journal.name=
canal.instance.master.position=
canal.instance.master.timestamp=
canal.instance.master.gtid=

# rds oss binlog
canal.instance.rds.accesskey=
canal.instance.rds.secretkey=
canal.instance.rds.instanceId=

# table meta tsdb info
canal.instance.tsdb.enable=true
#canal.instance.tsdb.url=
#canal.instance.tsdb.dbUsername=
#canal.instance.tsdb.dbPassword=

#canal.instance.standby.address =
#canal.instance.standby.journal.name =
#canal.instance.standby.position =
#canal.instance.standby.timestamp =
#canal.instance.standby.gtid=

# username/password
canal.instance.dbUsername=root
canal.instance.dbPassword=12345678
canal.instance.connectionCharset = UTF-8
# enable druid Decrypt database password
canal.instance.enableDruid=false
#canal.instance.pwdPublicKey=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALK4BUxdDltRRE5/zXpVEVPUgunvscYFtEip3pmLlhrWpacX7y7GCMo2/JM6LeHmiiNdH1FWgGCpUfircSwlWKUCAwEAAQ==

# table regex
canal.instance.filter.regex=.*\\..*
# table black regex
canal.instance.filter.black.regex=

# mq config
#canal.mq.topic=example
# dynamic topic route by schema or table regex
#canal.mq.dynamicTopic=mytest1.user,mytest2\\..*,.*\\..*
#canal.mq.partition=0
# hash partition config
#canal.mq.partitionsNum=3
#canal.mq.partitionHash=test.table:id^name,.*\\..*
#################################################

バックcanal.deployer-1.1.3ディレクトリ、運河を起動します。

sh bin/startup.sh

ログの表示:

vi logs/canal/canal.log

特定のインスタンスのログを表示します。

 vi logs/example/example.log

コマンドを終了します

sh bin/stop.sh

2.3インストール運河アダプタ

canal.adapter-1.1.3.tar.gzをダウンロード

wget https://github.com/alibaba/canal/releases/download/canal-1.1.3/canal.adapter-1.1.3.tar.gz

減圧

tar -zxvf canal.adapter-1.1.3.tar.gz

フォルダにファイルを解凍します

cd canal.adapter-1.1.3

それはYMLファイルであるため、研究会/ application.ymlファイルは、以下の主な注意を修正し、ここで説明する私のプロパティの名前に注意してください。

  • server.port:運河アダプタのポート番号
  • canal.conf.canalServerHost:運河・サーバーとIPアドレス
  • canal.conf.srcDataSources.defaultDS.url:アドレスデータベース
  • canal.conf.srcDataSources.defaultDS.username:データベース・ユーザー名
  • canal.conf.srcDataSources.defaultDS.password:データベースパスワード
  • canal.conf.canalAdapters.groups.outerAdapters.hosts:ESホストアドレス、TCPポート

次のように完全に読み取ります。

server:
  port: 8081
spring:
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8
    default-property-inclusion: non_null


canal.conf:
  mode: tcp
  canalServerHost: 127.0.0.1:11111
  batchSize: 500
  syncBatchSize: 1000
  retries: 0
  timeout:
  accessKey:
  secretKey:
  srcDataSources:
    defaultDS:
      url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true
      username: root
      password: 12345678
  canalAdapters:
  - instance: example
    groups:
    - groupId: g1
      outerAdapters:
      - name: es
        hosts: 127.0.0.1:9300
        properties:
         cluster.name: elasticsearch

また、confに/ ESの/ *を設定する必要があります。YMLファイル、アダプタは自動的にすべての研究会/ ESプロファイルで終わる.ymlロードされます。コンフィギュレーションを導入する前に、次のように、この場合に使用されるテーブル構造について教えする必要があります。

CREATE TABLE `test` (
  `id` int(11) NOT NULL,
  `name` varchar(200) NOT NULL,
  `address` varchar(1000) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

以下に示すように、ESは、ES-ヘッドを使用して、ここで作成したとして、手動でインデックスを作成する必要があります。

画像

次のようにインデックスの試験構造は次のようになります。

{
    "mappings":{
        "_doc":{
            "properties":{
                "name":{
                    "type":"text"
                },
                "address":{
                    "type":"text"
                }
            }
        }
    }
}

test.yml(意志のファイル名)を作成し、内容がインデックスによく理解_index名です次に、以下のように、SQL対応のステートメントは、読み取ります。

dataSourceKey: defaultDS
destination: example
groupId:
esMapping:
  _index: test
  _type: _doc
  _id: _id
  upsert: true
  sql: "select a.id as _id,a.name,a.address from test a"
  commitBatch: 3000

一度設定、起動するコマンドを実行し、根管アダプタに戻ります

bin/startup.sh

ログの表示

vi logs/adapter/adapter.log

閉じる運河-adapterコマンド

bin/stop.sh

3.テスト

すべて正常に起動した後、示されており、通りES-ヘッドを初めて目には、今データはありません。

画像

次に、以下のように我々は、データベース内のテストデータを挿入し、文は次のとおりです。

INSERT INTO `test`.`test`(`id`, `name`, `address`) VALUES (7, '北京', '北京市朝阳区');

次のように続いて、ES-頭を見て

画像

次に、以下のように、ログを見て:

2019-06-22 17:54:15.385 [pool-2-thread-1] DEBUG c.a.otter.canal.client.adapter.es.service.ESSyncService - DML: {"data":[{"id":7,"name":"北京","address":"北京市朝阳区"}],"database":"test","destination":"example","es":1561197255000,"groupId":null,"isDdl":false,"old":null,"pkNames":["id"],"sql":"","table":"test","ts":1561197255384,"type":"INSERT"} 
Affected indexes: test 

小さな知識:非常に使いやすいではないかもしれない上記の方法のログを表示し、そのような視聴ログ200の最後の行として次の構文を使用することが推奨されます。

tail -200f logs/adapter/adapter.log

4.まとめ

1.更新の完全な量を達成することはできないが、追加および削除が可能です。
2.事前に良いインデックスを作成してください。
3.es設定はTCPポートは、9300のデフォルトとして、あります

おすすめ

転載: www.cnblogs.com/dalaoyang/p/11069850.html