flume采集MongoDB数据到Kafka中
环境说明
- centos7(运行于vbox虚拟机)
- flume1.9.0(自定义了flume连接mongodb的source插件)
- jdk1.8
- kafka(2.11)
- zookeeper(3.57)
- mongoDB4.0.0(无密码)
- xshell 7
自定义flume插件
由于flume对数据库的支持欠缺,flume的source组件中,没有组件适用于连接关系型数据库或非关系型数据库。
对于关系型数据库(RDB),github中开源插件flume-ng-sql-source被广泛用于对接RDB。但是对于非关系型数据库,不同的非关系型数据库之间都有些许差别,且没有一个统一的,或者配对的插件来支持非关系型数据库。
因此,需要使用者自定义插件来适配。
我自定义的flume-ng-mongodb-source的jar包如下:
()
将该jar包放在yourpath/flume/lib
下(yourpath指你flume文件夹前面路径,下同。同理,下文出现的yourhost指你本机的ip地址)
连接mongodb的配置文件
在mongodb中创建database和collection,用于测试。
创建数据库:
创建集合(隐式创建):
查看是否已经创建了数据库:
查看集合中的数据:
此外,我们需要将mongodb相关的驱动jar包放到yourpath/flume/lib
下
flume连接mongodb需要先编写相关的配置文件,在yourpath/flume/conf
里新增配置文件mongo-flume.conf
,具体的配置如下:
参数说明:
因为mongodb有集群操作,所以flume-ng-mongodb-source也支持mongodb集群,只需要在a1.sources.r1.Mongodb.url
里配置多个url即可,如:
采集mongodb数据实践
启动mongodb和kafka。
启动flume
参数说明:
a1
:是你在mongo-flume中给agent起的别名conf/mongo-flume.conf
:导入前文所述的配置文件,配置文件在yourpath/flume/conf
下。
启动一个kafka消费监控:
获取testCollection中全部数据(下图不是重复数据,是之前多次测试在topic中留下的数据):
往testCollection中添加一条数据:
消费监控中的结果如下:
只读增量数据
如果不想把collection中所有的数据都读取出来,请修改flume-ng-mongodb-source源码。
在MongoDBSource.java文件中,找到run
方法,取消掉events.clear()
的注释。
再次打包,替换掉lib下flume-ng-mongodb-source的jar包。
然后再次执行上面的启动操作:
插入一条数据:
查看消费监控:
可以看到只有新增的数据了,不会再读取所有的数据
再插入一条数据实验一下:
__EOF__

本文链接:https://www.cnblogs.com/namelessguest/p/14179767.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!