请教大牛,我自己写了一个SinkFunction,继承了RichSinkFunction,初始化这个SinkFunction时,我传进去了一个数据库连接池对象,在SinkFunction的invoke里,调用数据库连接池对象来写数据库。我的问题是,当SinkFunction被partition到多个机器的vm执行时,这个数据库连接池对象是在程序入口的JobClient(程序提交所在的机器VM),还是这个对象也被复制了好多份,有多少个SinkFunction在运行就有多少个数据库连接池对象?-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

请教大牛,我自己写了一个SinkFunction,继承了RichSinkFunction,初始化这个SinkFunction时,我传进去了一个数据库连接池对象,在SinkFunction的invoke里,调用数据库连接池对象来写数据库。我的问题是,当SinkFunction被partition到多个机器的vm执行时,这个数据库连接池对象是在程序入口的JobClient(程序提交所在的机器VM),还是这个对象也被复制了好多份,有多少个SinkFunction在运行就有多少个数据库连接池对象?

赵慧 2019-02-21 17:09:50 3570

转自钉钉群21789141:请教大牛,我自己写了一个SinkFunction,继承了RichSinkFunction,初始化这个SinkFunction时,我传进去了一个数据库连接池对象,在SinkFunction的invoke里,调用数据库连接池对象来写数据库。我的问题是,当SinkFunction被partition到多个机器的vm执行时,这个数据库连接池对象是在程序入口的JobClient(程序提交所在的机器VM),还是这个对象也被复制了好多份,有多少个SinkFunction在运行就有多少个数据库连接池对象?

数据库
分享到
取消 提交回答
全部回答(1)
  • 赵慧
    2019-07-17 23:28:57

    鲁尼:取决于你的连接池对象是在哪里初始化的,如果是构造函数里就初始化好了,那在客户端就做了,连接池对象会被尝试序列化并分发到多个分布式worker。如果是在类似open的时候才初始化,那就一个task一个(除非这个连接池对象做了一些进程级别的共享,刚好你有多个task调度到了同一个进程)

    问:那你说的这2种情况,A:初始化了在序列化分发,B:分别在worker/tasker里自己初始化。对于连接数最大限制来说,其实连接数最大限制都是只在worker/tasker里有限制,而不是在整个范围内限制了对吗?也就是我定最大连接数限制1000,不是所有的worker/tasker加起来不超过1000,而是每个worker/tasker不超过1000?

    鲁尼:看你的连接数限制是连接池这的限制还是数据库server那边的限制了,连接池这边的话,确实就是单task内限制了

    0 0
数据库
使用钉钉扫一扫加入圈子
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

推荐文章
相似问题
推荐课程