使用使用者组ID

时间:2016-10-17 13:39:52

标签: apache-kafka apache-storm kafka-consumer-api kafka-producer-api

自从一段时间以来我一直在努力了解如何创建一组订阅单个主题的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)是否作为一个组。作为一个组,我的意思是如果创建一个新的喷口,动物园管理员会重新安排分区。

提前致谢

1 个答案:

答案 0 :(得分:0)

storm-kafka使用SimpleConsumer而不是高级使用者API,因此group.id并不重要,因为它适用于使用此设置实现高可用性和故障转移的高级使用者。

回到你的问题,我更倾向于认为你的代码在运行时会发生错误,因为两个消费者实例将竞争相同的zk路径锁。