最近在做数据统计功能,需要将mongodb数据实时同步到 elasticsearch 中。目前找到的方案有两种
1、通过flink mongodb cdc
flink mongodb cdc 的优点是比较灵活,可以将mongodb中的数据同步到任意支持的目标库中,不限于elasticsearch ,但是目前在使用的过程共发现同步时会自动加一个Changelog Normalize 算子,背压比较严重。网上找了很多资料,暂时无法解决。
2、monstache 优点的话就是同步速度很快暂时没有发现性能问题,缺点也比较明显就是只能同步mongodb 数据到elasticsearch 中。
docker 中部署monstache(需要注意monstache版本要与elasticsearch 版本匹配)
docker run --privileged --name monstache -v /home/docker/monstache/config/monstache.config.toml:/app/monstache.config.toml -d -t rwynn/monstache '-f' '/app/monstache.config.toml'
monstache.config.toml 内容如下
1 # ip地址注意要修改 2 mongo-url = "mongodb://xx.x.xxx.xxx:27017,xx.x.xxx.xxx:27018,xx.x.xxx.xxx:27019" 3 # ip地址注意要修改 4 elasticsearch-urls = ["http://xx.x.xxx.xxx:9200"] 5 # mydb指的是需要同步的数据库 6 direct-read-namespaces = ["xx.xxxx","xx.xxxx","xx.xxxx"] 7 change-stream-namespaces = ["xx.xxxx","xx.xxxx","xx.xxxx"] 8 #elasticsearch-user = "elastic" 9 #elasticsearch-password = "pwd"10 #elasticsearch-max-cOnns= 411 dropped-collectiOns= true12 dropped-databases = true13 resume = true14 resume-strategy = 015 verbose = true16 cluster-name = 'docker-cluster'17 18 [[mapping]]19 namespace = "xx.xxxx"20 index = "xxxx"21 type= "type-xxx"22 23 [[mapping]]24 namespace = "xx.xxxx"25 index = "xxxx"26 type= "type-xxx"27 28 [[mapping]]29 namespace = "xx.xxxx"30 index = "xxxx"31 type= "type-xxx"