この記事ではElasticSearchに運河増分同期のMySQLのデータベース情報を使用する方法について説明します。(注:インクリメンタル!!!)
1.はじめに
はじめに1.1運河
運河は、MySQLベースのバイナリログパフォーマンスデータ同期システムです。広く(含む運河アリババに使用https://www.taobao.com信頼性の低遅延データパイプ増分を提供するために、)、githubの住所:https://github.com/alibaba/canal
運河Serverは、MySQLのバイナリログを解析し、データの変更をサブスクライブし、変更が運河クライアントがデータベースやApacheのカフカなど、任意の場所にブロードキャスト実装することができます。
それは次の機能があります。
- すべてのサポートされるプラットフォーム。
- プロメテウスきめ細かな監視システムを搭載しサポート。
- 分析支援とGTIDにより例えば、異なる方法でのMySQLのbinlogに加入。
- 高性能、リアルタイムのデータ同期をサポートしています。(パフォーマンスを参照してください)
- 運河サーバとApache ZooKeeperのでサポートされている運河クライアントサポートHA /スケーラビリティ、
- ドッカーサポート。
短所:
全額の更新をサポートしていないだけ増分更新をサポートしています。
フルウィキ住所:https://github.com/alibaba/canal/wiki
どのように動作する1.2
原理は簡単です:
- スレーブの管アナログMySQLの対話プロトコルは、スレーブは、MySQLを装っ、及び転送プロトコルマスタMySQLサーバに送信されます。
- MySQLのマスターダンプ要求が受信され、バイナリログスレーブ(すなわち管)をプッシュし始めます。
- 運河バイナリログオブジェクトは、データのタイプ(ロー・バイトストリーム)に解決します
図示のように:
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のデフォルトとして、あります