Storm Bolt数据库连接

gir*_*der 8 connection cassandra apache-storm

我正在使用Storm(java)和Cassandra.

我的一个Bolts将数据插入到Cassandra中.有没有办法在这个螺栓的实例化之间保持与Cassandra的连接?

我的应用程序的写入速度很快.螺栓需要每秒运行几次,并且每次连接到Cassandra的事实都会阻碍性能.

如果我可以保持打开的静态连接,它会运行得更快,但我不确定在风暴中实现这一点.

澄清问题:

风暴拓扑中静态连接的范围是什么?

与其他消息系统不同的是,工作中的"工作"在循环或回调中进行,可以在此循环之外使用变量(可能是静态连接),风暴螺栓似乎每次被调用时都会被实例化,而不能将参数传递给它们,那么如何使用与cassandra相同的连接?

use*_*864 9

与其他消息系统不同的是,工作中的"工作"在循环或回调中进行,可以在此循环之外使用变量(可能是静态连接),风暴螺栓似乎每次被调用时都会被实例化,而不能将参数传递给他们

说风暴螺栓被instantiated each time称为是不正确的.例如,该prepare方法仅在初始化阶段期间被调用,即被调用一次.从文档中可以
看出,当群集中的工作人员初始化此组件的任务时,会调用它.它为螺栓提供螺栓执行的环境.

所以最好的办法是将初始化代码放在准备或打开(如果是spouts)方法,因为它们将在任务启动时被调用.但是你需要使它成为线程安全的,因为它将在它自己的线程中同时被每个任务调用. 另一方面,

execute(Tuple tuple)方法实际上负责处理逻辑,并在每次从相应的喷口或螺栓接收元组时调用.(因此这实际上是每次螺栓运行时调用的)


文件说,cleanupIBolt即将关闭时,调用该方法

没有保证会调用清理,因为主管在集群上杀死-9的工作进程.保证调用清理的一个上下文是在本地模式下运行Storm时导致拓扑被杀死的情况

因此,不能将变量传递给它,您可以使用prepare方法实例化任何实例变量,然后在处理过程中使用它.

关于数据库连接,我不完全确定你的用例,因为你没有放任何代码,但维护资源池听起来对我来说是个不错的选择.