利用MongoShake进行Mongodb数据的实时变更处理

最近在做数据仓库相关的项目,需要对各业务系统异构数据进行统一归集,不同业务系统以及相同异构系统不同功能模块用到的数据存储方式不尽相同,其中有一些功能模块采用的数据存储方式为Mongodb,为了能够实时对Mongodb发生变更的数据进行归集,通过调研发现阿里的开源系统MongoShake可以实现该需求,整个环境通过docker搭建,本文将整个搭建过程进行记录,方便有需求的朋友使用。

处理流程

avatar

环境准备

环境 服务器 说明
宿主机 172.21.48.1
Zookeeper 172.17.0.2 Kafka的Broker由Zookeeper进行管理,所以需先安装Zookeeper环境
Kafka 172.17.0.3
Kafka-Manager 172.17.0.4 Kafka的web端管理界面
Mongodb 172.21.48.1 windows宿主机进行搭建,大家也可通过docker进行搭建
MongoShake 172.17.0.5 使用Centos进行Mongoshake的安装

安装步骤

为了方便测试,本文中docker网络采用默认网络,宿主机可以和容器进行通信,大家在实际环境中可自定义网络进行网络隔离,保证系统安全。

安装Zookeeper

docker run -d --name zookeeper-mongo -p 2181:2181 wurstmeister/zookeeper

安装完成后在宿主机可通过telnet 172.21.48.1 2181进行测试

安装Kafka

docker run -d --name kafka-mongo -p 9092:9092 -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=172.21.48.1:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://172.21.48.1:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 wurstmeister/kafka
参数说明
参数 说明
KAFKA_BROKER_ID 每个Kafka都有一个Broker_Id来进行区分
KAFKA_ZOOKEEPER_CONNECT Zookeeper管理Kafka的路径
KAFKA_ADVERTISED_LISTENERS 把Kafka地址注册给Zookeeper
KAFKA_LISTENERS Kafka的监听端口配置

安装完成后在宿主机可通过telnet 172.21.48.1 9092进行测试

安装Kafka-Manager

docker run -d --name kafka-manager -p 9000:9000 -e ZK_HOSTS=172.21.48.1:2181 -e KAFKA_BROKERS=172.21.48.1:9092 sheepkiller/kafka-manager
参数 说明
ZK_HOSTS Zookeeper地址,如果是集群配置集群地址
KAFKA_BROKERS Kafka地址,如果是集群配置集群地址

安装完成后在宿主机可通过访问http://localhost:9000并添加Cluster进行测试,成功界面如下图:

avatar

安装Mongodb

Mongodb安装在宿主机上,可参考windows安装mongodb,安装成功后请设置管理员账户名密码。

<font color=red >注意:Mongodb的绑定地址设置为0.0.0.0</font>

MongoShake运行依赖与Mongodb的oplog,oplog相当于mysql的binlog,极大方便了Mongodb副本集各节点的数据同步。本文为单机版Mongodb,需手动开启oplog,开启方式如下:

添加副本集配置

修改mongod.cfg文件,增加如下配置后重启服务:

replication:
  oplogSizeMB: 50
  replSetName: rs
# 初始化副本集
use admin
# 权限验证
db.auth("账户名","密码")
rs.initiate({ _id: "rs", members: [{_id:0,host:"127.0.0.1:27017"}]})

登录Mongodb数据库可以查看到oplog.rs的Collection。

安装MongoShake

安装Centos容器
docker run -itd --name centos-mongo centos:7 /bin/bash
# 进入容器cli界面安装wget(下载MongoShake用)
yum install wget -y
下载MongoShake
# 切换到/home目录
cd /home
# 下载文件
wget https://github.com/alibaba/MongoShake/releases/download/release-v2.6.4-20210414/mongo-shake-v2.6.4_2.tar.gz
# 解压文件
tar -xvzf mongo-shake-v2.6.4_2.tar.gz
# 重命名文件夹
mv mongo-shake-v2.6.4 mongo-shake
配置MongoShake
# 切换到mongo-shake目录
cd mongo-shake
# 修改collector.conf文件
vi collector.conf

配置参数大部分默认就好,修改项如下:

mongo_urls = mongodb://username:password@172.21.48.1:27017
tunnel = kafka
tunnel.address = test@172.21.48.1:9092 #test为kafka的topic
tunnel.message = json
启动MongoShake
./collector.linux -conf=collector.conf

如果没报错,那么正常是启动成功了

验证

进入mongodb,在数据库中删除一条数据,然后打开Kafka-Manager的管理页面,看是否有名为test的topic,有的话说明启动成功。

从Kafka消费数据

以python为例,消费代码如下:

import sys
from pykafka import KafkaClient
import logging
logging.basicConfig(stream=sys.stdout, level=logging.NOTSET)

logging.info('程序启动...........')
client = KafkaClient(zookeeper_hosts="192.168.3.20:2181")
logging.info(client.topics)
topic = client.topics['test']
consumer = topic.get_simple_consumer(consumer_group="test",
                                     reset_offset_on_start=True)

for message in consumer:
    if message is not None:
        logging.info(message.value)

启动程序,然后对MongoDB的数据库进行数据变更,如果顺利,控制台应该会打印出变更的数据内容,如下图:


avatar

至此,整个环境就搭建成功了,希望对大家有帮助,谢谢!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,324评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,356评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,328评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,147评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,160评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,115评论 1 296
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,025评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,867评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,307评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,528评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,688评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,409评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,001评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,657评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,811评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,685评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,573评论 2 353

推荐阅读更多精彩内容