作者:allenn2012 | 来源:互联网 | 2023-07-01 13:41
最近在做数据统计功能,需要将mongodb数据实时同步到 elasticsearch中。目前找到的方案有两种1、通过flinkmongodbcdc flinkmongodbcdc的
最近在做数据统计功能,需要将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= 4
11 dropped-collectiOns= true
12 dropped-databases = true
13 resume = true
14 resume-strategy = 0
15 verbose = true
16 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"