storm-kafka Spout正在检索错误的偏移量

时间:2014-07-23 01:40:24

标签: apache-kafka apache-storm

https://github.com/apache/incubator-storm(last提交中使用kafka 0.8.1.1及其各自的zookeeper和kafka-storm的当前代码:7ac24b893c)我遇到以下错误:

  

如果我创建两个主题(topicA和topicB)并将数据发送到   topicA(将topicA的偏移量更改为offsetA)并打开kafka   为topicA喷出,一切都好。但是,如果我为topicB打开一个喷口,   spout正在检索topicA的偏移量,从而导致a   与此错误偏移相关的异常(offsetA而不是offsetB)。

检查:https://github.com/apache/incubator-storm/blob/master/external/storm-kafka/src/jvm/storm/kafka/PartitionManager.java#L103中的代码,正在检索正确的offsetB,但不是使用此变量,而是使用在json中找到的偏移量。这个json位于 / id / partition_0 (一个zookeeper url)中,其中存储了两个主题。

如果我从zookeeper获取partition_0中的数据,我会收到以下信息(为了可读性而美化):

$ get /id/partition_0
{
"topology": {
    "id": "58e1c603-0ab0-4344-a614-204e4455e90a",
    "name": "Start test storm"
},
"offset": 1,
"partition": 0,
"broker": {
    "host": "XXX.XXX.XXX.XXX.compute.amazonaws.com",
    "port": 9092
},
"topic": "topicA"
}
 ...

如您所见,正在给出topicA的偏移量。这是我不理解的行为:如果我从两个主题的相同网址( / id / partition_0 )检索偏移量,很明显,对于某些主题,错误的偏移量将会被检索。在我的zookeeper-kafka配置中是否配置错误?是其他导致此错误的原因吗?

我修改了该类中的代码(PartitionManager构造函数),以便忽略 / id / partition_0 中的json并使用 KafkaUtils.getOffset(_consumer,spoutConfig.topic, id.partition,spoutConfig); ,我的数据流正确运行。

如果有帮助,我还会为这两个主题添加zookeeper信息。

$ get /brokers/topics/topicA
{"version":1,"partitions":{"0":[0]}}
...


$ get /brokers/topics/topicB
{"version":1,"partitions":{"0":[0]}}
...

0 个答案:

没有答案