自从一段时间以来我一直在努力了解如何创建一组订阅单个主题的kafkaspouts。我发现一些来源引用spoutconfig中的id可以用作组ID。我的主要问题是如何知道创建的喷口是否作为一个组。我还想知道setSpout()
中的paralellism_hint是否是创建一组paralellism_hint数量的鲸鱼喷水的人。请赐教。
我的代码是这样的
private KafkaSpout buildKafkaSpout(String zkTopic, String zkRoot, String groupId) {
String zkConnString = "localhost:2181";
BrokerHosts hosts = new ZkHosts(zkConnString);
SpoutConfig kafkaSpoutConfig = new SpoutConfig (hosts, zkTopic,zkRoot, groupId );
kafkaSpoutConfig.scheme = new SchemeAsMultiScheme(new StringScheme());
KafkaSpout kafkaSpout = new KafkaSpout(kafkaSpoutConfig);
return kafkaSpout;
}
private void buildTopologyForGroupOne(TopologyBuilder builder ) {
String zkTopic = "topic1";
String zkRoot = "/topic1";
String groupId = "group1";
List<String> zkSpoutIds = new ArrayList<String>();
zkSpoutIds.add("word_count-spout");
zkSpoutIds.add("total_word_count-spout");
for(String spoutId:zkSpoutIds ){
KafkaSpout kafkaSpout = buildKafkaSpout(zkTopic, zkRoot, groupId);
builder.setSpout(spoutId.concat("_"+groupId), kafkaSpout,2);
}
builder.setBolt("word_split-bolt_group_1",new SplitBolt()).shuffleGrouping("word_count-spout"+"_"+groupId);
builder.setBolt("split_count-bolt_group_1",new CountBolt()).shuffleGrouping("word_split-bolt_group_1");
builder.setBolt("total_word_count-bolt_group_1",new TotalWordCountBolt()).shuffleGrouping("total_word_count-spout"+"_"+groupId);
}
现在我怎么知道我创建的两个喷口(word_count-spout,total_word_count-spout)是否作为一个组。作为一个组,我的意思是如果创建一个新的喷口,动物园管理员会重新安排分区。
提前致谢
答案 0 :(得分:0)
storm-kafka使用SimpleConsumer而不是高级使用者API,因此group.id并不重要,因为它适用于使用此设置实现高可用性和故障转移的高级使用者。
回到你的问题,我更倾向于认为你的代码在运行时会发生错误,因为两个消费者实例将竞争相同的zk路径锁。