kafka spout无法连接到kafka主题

时间:2015-06-18 10:41:57

标签: apache-kafka apache-storm apache-zookeeper

我正在尝试连接属于LocalCluster对象上运行的风暴拓扑的KafkaSpout。我根据https://github.com/apache/storm/tree/master/external/storm-kafka上的文档编写了这段代码。

 private static final String brokerZkStr = "localhost:2181";
private static final String topic = "/test-topic-multi";

public void startTopology()
{

    BrokerHosts hosts = new ZkHosts(brokerZkStr);
    SpoutConfig conf = new SpoutConfig(hosts, topic, "localhost:2181", UUID
            .randomUUID().toString());


    KafkaSpout kafkaSput = new KafkaSpout(conf);

    TopologyBuilder builder = new TopologyBuilder();

    builder.setSpout("kafka-spout", kafkaSput);

    Config topConfig = new Config();
    topConfig.setDebug(true);

    LocalCluster cluster = new LocalCluster();
    cluster.submitTopology("HelloStorm", topConfig , builder.createTopology());
}

我想使用在localhost:2181运行的zookeeper实例,但是当尝试运行代码时,我收到以下错误:

  java.lang.RuntimeException: java.lang.RuntimeException: java.lang.IllegalArgumentException: Invalid path string "/brokers/topics//test-topic-multi/partitions" caused by empty node name specified @16
at storm.kafka.DynamicBrokersReader.getBrokerInfo(DynamicBrokersReader.java:81)
at storm.kafka.trident.ZkBrokerReader.<init>(ZkBrokerReader.java:42)
at storm.kafka.KafkaUtils.makeBrokerReader(KafkaUtils.java:57)
at storm.kafka.KafkaSpout.open(KafkaSpout.java:87)

这似乎只是一个错误设置的问题,但我无法解决它

PS Kafka配置如下:1个Zookeeper实例和2个代理在localhost:9092localhost:9093上运行

2 个答案:

答案 0 :(得分:1)

我想我解决了。我刚刚搞砸了配置代码。正确的是:

private static final String topic = "test-topic-multi";
....
SpoutConfig conf = new SpoutConfig(hosts, topic, "/" + topic, UUID
            .randomUUID().toString());

答案 1 :(得分:0)

您的kafka主题名称无效。您为什么要尝试连接到不存在的主题?

sql@injection:~$ kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic /test-topic
Error while executing topic command topic name /test-topic is illegal, contains a character other than ASCII alphanumerics, '.', '_' and '-'
kafka.common.InvalidTopicException: topic name /test-topic is illegal, contains a character other than ASCII alphanumerics, '.', '_' and '-'
    at kafka.common.Topic$.validate(Topic.scala:42)
    at kafka.admin.AdminUtils$.createOrUpdateTopicPartitionAssignmentPathInZK(AdminUtils.scala:181)
    at kafka.admin.AdminUtils$.createTopic(AdminUtils.scala:172)
    at kafka.admin.TopicCommand$.createTopic(TopicCommand.scala:93)
    at kafka.admin.TopicCommand$.main(TopicCommand.scala:55)
    at kafka.admin.TopicCommand.main(TopicCommand.scala)

您是否确定前斜杠属于主题名称?