如何知道哪个服务器正在运行storm/bolt

vawmfj5a  于 2021-06-24  发布在  Storm
关注(0)|答案(1)|浏览(498)

我有一个关于Apache风暴的问题。目前我们使用一些服务器来实现storm,我们的应用程序需要facebook/twitter令牌。
所以我们要这样设计:每个令牌都属于一个特定的服务器,当一个bolt接收到元组时,它会请求一个专门针对这个bolt运行示例的令牌,这是为了防止不同的服务器在短时间内使用同一个令牌时令牌阻塞。
任何人都知道如何实现这一点,有没有办法知道一个正在运行的bolt示例的哪些服务器?谢谢。

qnakjoqk

qnakjoqk1#

如果希望每个bolt示例有一个令牌,那么可以向bolt类中添加一个示例变量来保存该令牌,并在bolt生命周期的适当时间初始化/清除该令牌。
如果您想为每台机器拥有一个令牌,那么您可以创建一个单例bean来为整个jvm持有一个令牌。注意,如果您想在一台机器上有多个worker,那么您需要为每台机器使用多个令牌(每台机器上的jvm一个),或者构建一个独立的中间件服务器,该服务器拥有令牌并处理来自机器上多个jvm的请求。即使这是可以接受的,您仍然需要解决如何使单个jvm/worker中的所有bolt示例共享该jvm的一个令牌。

相关问题