、
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をダウンロード
ファイルを解凍します
フォルダにファイルを解凍します
次へのconf /例/ instance.propertiesファイル、いくつかの主要な注意を変更します。
canal.instance.master.address:アドレスデータベース、たとえば127.0.0.1:3306
canal.instance.dbUsername:データベース・ユーザー
canal.instance.dbPassword:データベースのパスワードの完全な内容は以下の通り:
バックcanal.deployer-1.1.3ディレクトリ、運河を起動します。
SHビン/ startup.sh
ログの表示:
私たちのログ/運河/ canal.log
特定のインスタンスのログを表示します。
viのログ/例/ example.log
コマンドを終了します
SHビン/ 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
減圧
canal.adapter-1.1.3.tar.gz -zxvfタール
フォルダにファイルを解凍します
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文件,adapter将会自动加载conf / 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-head创建,如下图:
test索引结构如下:
{
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
配置完成后,回到canal-adapter根目录,执行命令启动
bin/startup.sh
查看日志
vi logs/adapter/adapter.log
关闭canal-adapter命令
bin/stop.sh
3.测试
都启动成功后,先查看一下es-head,如图,现在是没有任何数据的。
接下来,我们在数据库中插入一条数据进行测试,语句如下:
INSERT INTO `test`.`test`(`id`, `name`, `address`) VALUES (7, '北京', '北京市朝阳区');
然后在看一下es-head,如下
接下来看一下日志,如下:
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