storm trident的多数据流,多spout
@(STORM)[storm, kafka]
storm可以使用接收多个spout作为数据源,core storm与trident均可以,本文主要介绍trident的用法。
在trident中设置多个spout的基本思路是先建立多个spout,然后分别创建对应的Stream,并将这些stream merge在一起。
我们这里介绍2个例子,第一个是使用多spout的方式来从kafka读取多个topic,第二个例子是一个spout从kafka读数据,另一个spout定时产生一些数据,拓扑根据这个数据进行定时操作。
(一)使用多个spout同时从kafka中读取多个topic
注意使用storm-kafka从多个topic中读取数据的更优方法请见:https://issues.apache.org/jira/browse/STORM-817?jql=project%20%3D%20STORM%20AND%20status%20in%20%28Open%2C%20%22In%20Progress%22%2C%20Reopened%29%20AND%20component%20%3D%20storm-kafka
这里只是用于介绍如何使用多个spout。
TODO:看看是如何实现的
1、创建第一个spout
TridentKafkaConfig kafkaConfig = new TridentKafkaConfig(zkHost, topic, "storm");
kafkaConfig.scheme = new SchemeAsMultiScheme(new StringScheme());
TransactionalTridentKafkaSpout kafkaSpout = new TransactionalTridentKafkaSpout(kafkaConfig);
2、创建第二个spout
TridentKafkaConfig kafkaConfig2 = new TridentKafkaConfig(zkHost, "stream