哪位主管会通过它的鲸鱼喷水听?

时间:2016-04-04 13:46:19

标签: apache-storm

在我的拓扑结构中,我有一个在端口5555上打开套接字以便接收消息的喷口。

如果我的Storm群集中有10名主管,他们每个人都会听他们的5555端口吗?

最后,我应该向哪位主管发送消息?

1 个答案:

答案 0 :(得分:1)

此处有多条评论:

  • Storm使用基于拉的模型通过Spouts进行数据摄取。如果您打开一个套接字,您将阻止Spout直到数据可用(这很糟糕;请参阅此SO问题以获取更多详细信息:Why should I not loop or block in Spout.nextTuple()
  • 关于Spout部署(主管):
    • 首先,它取决于你的喷口的平行度(即parallelims_hint,默认值是1)
    • 第二,主管没有执行Spout代码:主管启动执行Spouts / Bolts的工作人员JVM(参见拓扑的配置参数number_of_workers
    • 第三,Storm使用负载均衡的循环调度程序;因此,可能会发生两个Spout执行程序被安排到同一个工作者JVM(或同一主机上的不同工作者);对于这种情况,您将收到端口冲突(只有一个执行将能够打开端口)
  • 在这种情况下,日期分配无关紧要:如果你真的使用push,你可以选择任何主机发送数据;风暴并不在乎。当然,如果您需要某种基于密钥的分区,您可能希望从单个分区发送单个Spout实例的数据;作为替代方案,只需转发Spout中的数据并使用fieldsGrouping获取消耗Bolt的分区。但是,如果您使用Spout提取基于拉的数据,则可以确保每个Spout从某些分区中提取数据,并且问题会自然解决。

总结一下:使用基于推送的数据提取可能是一个坏主意。