mongoshake同步mongodb数据到kafka

前言

在上一篇,mongoshake实现mongodb数据同步中,我们详细探讨了如何使用mongoshake实现数据从mongodb同步到mongodb的完整流程,本篇基于mongoshake,继续探讨在数据同步中的另一个场景,即从mogodb同步数据到kafka

业务场景举例

有这样一个需求场景,mongo的某个数据集中,存储了海量的操作行为日志数据,比如定义了一个数据对象的模型集合,有100多个字段,在这个对象模型中,不同的操作行为有一个tag标签作为区分

在下游的应用中,需要接收行为日志数据进行计算分析,得出操作行为轨迹,由于日志数据写到mongodb和下游的分析应用是独立的微服务,两者之间并没有直接的关系,同时又要求系统的性能具备较高的性能,于是想到使用mongoshake作为中介,将mongodb的数据同步到kafka的topic,下游的各个应用只需要监听相关的topic数据即可

mongoshake同步mongodb数据到kafka_第1张图片

这种需求可以衍生出很多其他的场景来,有兴趣的同学可以深入思考,下面来演示下具体的操作步骤

前置准备

1、提前搭建好mongodb集群(复制集群或分片集群)

本篇基于上一篇的复制集群为例,不知道怎么搭建集群的可以参考上一篇的内容
mongoshake同步mongodb数据到kafka_第2张图片

2、基于centos7搭建的kafka服务

提前在服务器上安装好kafka并启动服务,确保测试时可以使用,为演示效果,建议在不同的机器上安装kafka,kafka安装启动后,请提前创建好一个topic,此处我已提前创建了一个名为 “zcy” 的topic

进入kafka的生产者shell终端窗口,给topic发送一条数据
在这里插入图片描述

进入kafka的消费者shell终端窗口,可以正常接收到数据
在这里插入图片描述

3、mongodb复制集群提前创建一个数据集

该数据集作为mongoshake同步mongodb同步的数据源,为方便数据测试,提前从主节点登录进去,创建了一个articledb的数据库,里面创建了一个comment的集合

并随机创建了几条测试数据
mongoshake同步mongodb数据到kafka_第3张图片

mongoshake配置

1、配置mongoshake的collctor.linux

关于配置,mongoshake在github的官方文档里面,给了参考的配置,小编在这里需要说明的是官方给出的只是某个版本的通用配置,由于版本的不同,配置上已经发生了变化,但是并没有给出说明,需要避免踩坑

官方链接:https://github.com/alibaba/MongoShake

以下为github上面给出的配置

mongo_urls = mongodb://username:[email protected]:1001,10.2.2.2:2002,10.3.3.3:3003 #源端连接串信息,逗号分隔不同的mongod
sync_mode = oplog # 如果目的端不是mongodb,仅支持增量同步模式
incr_sync.tunnel = kafka
incr_sync.tunnel.address = [email protected]:6379
incr_sync.mongo_fetch_method = oplog # 如果希望以change stream拉取,该值需要配置change_stream,支持>=4.0.1版本。

这个配置对于小编使用的 mongo-shake-v2.4.6 这个版本,配置后是跑不起来的,结合自身的情况,给出下面关键的配置,确保配置完毕后,可以正常的将mongodb中的数据同步到kafka


#mongo同步到kafka采用incr增量的形式
sync_mode = incr

#源数据库地址
mongo_urls = mongodb://mongo复制集IP:27017,mongo复制集IP:27018,mongo复制集IP:27019

#配置kafka的同步
tunnel = kafka

#这里使用kafka的地址
tunnel.address = zcy@kafka所在服务器IP:9092

#mongo到kafka,采用json
tunnel.message = json

以上就是核心的配置,更多的配置参数参考官方给出的说明,这里就不再一一列举了,给出配置说明地址:github wiki配置参数说明

2、启动mongoshake

使用下面的命令启动服务

./collector.linux -conf=collector.conf

这是一种不需要输出日志的启动,可以在后面添加: -verbose打印实时日志,如果你的配置文件哪里有问题,启动时候会给出提示
在这里插入图片描述

3、同步过程测试

在上面开启的mongodb复制集群的primary的shell窗口下,给comment集合添加一条数据

db.comment.insert({"articleid":"100005","content":"hello kafka","userid":"1005","nickname":"kafka"})

在这里插入图片描述

这时候前往kafka的消费者shell窗口观察下,可以看到这条数据几乎是实时的同步过来了
在这里插入图片描述

有了上面同步到kafka的数据,接下去就可以在应用中接收topic的数据进行相关的业务处理了

你可能感兴趣的:(技术总结,mongoshake数据同步,mongoshake同步数据,mongoshake详细使用,mongoshake使用详解)