【发布时间】:2016-03-17 23:44:11
【问题描述】:
所以我在使用单个 kafka 0.8.2.0 代理和在 mesos 中运行的 java 消费者时遇到了这个错误。我不得不说它曾经可以工作,而 AFAIK 没有任何改变。
这是消费者在mesos中运行时的错误:
16/03/17 05:44:23 WARN ConsumerFetcherManager$LeaderFinderThread: [alertConsumer_secasprddb01-1-1458193432645-387abff0-leader-finder-thread], Failed to find leader for Set([events,1], [events,14], [events,2], [events,8], [events,7], [events,10], [events,3], [events,11], [events,5], [events,0], [events,12], [events,13], [events,6], [events,4], [events,9]) kafka.common.KafkaException: fetching topic metadata for topics [Set(events)] from broker [ArrayBuffer(id:0,host:prodMessage01-1.blah.com,port:9092)] failed at kafka.client.ClientUtils$.fetchTopicMetadata(ClientUtils.scala:72)
at kafka.client.ClientUtils$.fetchTopicMetadata(ClientUtils.scala:93)
at kafka.consumer.ConsumerFetcherManager$LeaderFinderThread.doWork(ConsumerFetcherManager.scala:66)
at kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:60) Caused by: java.net.SocketTimeoutException
我什至完全删除了该主题并从头开始重新创建它,但仍然出现同样的错误。
如果我在与代理相同的盒子上运行脚本 kafka-console-consumer.sh,我仍然会收到错误消息:
Failed to find leader for Set([events,1], [events,14], [events,2], [events,8], [events,7], [events,10], [events,3], [events,11], [events,5], [events,0], [events,12], [events,13], [events,6], [events,9], [events,4]) (kafka.consumer.ConsumerFetcherManager$LeaderFinderThread) kafka.common.KafkaException: fetching topic metadata for topics [Set(events)] from broker [ArrayBuffer(id:0,host:prodMessage01-1.blah.com,port:9092)] failed
at kafka.client.ClientUtils$.fetchTopicMetadata(ClientUtils.scala:72)
at kafka.client.ClientUtils$.fetchTopicMetadata(ClientUtils.scala:93)
at kafka.consumer.ConsumerFetcherManager$LeaderFinderThread.doWork(ConsumerFetcherManager.scala:66)
at kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:60) Caused by: java.net.SocketTimeoutException
因此,即使一切都是代理本地的,它仍然失败。这怎么可能?
如果我真的删除并重新创建了主题,我不知道如何才能克服这个问题。
如果我做一个主题描述(kafka-topics.sh -- describe),它工作正常:
Topic:events PartitionCount:15 ReplicationFactor:1 Configs:
Topic: events Partition: 0 Leader: 0 Replicas: 0 Isr: 0
Topic: events Partition: 1 Leader: 0 Replicas: 0 Isr: 0
Topic: events Partition: 2 Leader: 0 Replicas: 0 Isr: 0
Topic: events Partition: 3 Leader: 0 Replicas: 0 Isr: 0
Topic: events Partition: 4 Leader: 0 Replicas: 0 Isr: 0
Topic: events Partition: 5 Leader: 0 Replicas: 0 Isr: 0
Topic: events Partition: 6 Leader: 0 Replicas: 0 Isr: 0
Topic: events Partition: 7 Leader: 0 Replicas: 0 Isr: 0
Topic: events Partition: 8 Leader: 0 Replicas: 0 Isr: 0
Topic: events Partition: 9 Leader: 0 Replicas: 0 Isr: 0
Topic: events Partition: 10 Leader: 0 Replicas: 0 Isr: 0
Topic: events Partition: 11 Leader: 0 Replicas: 0 Isr: 0
Topic: events Partition: 12 Leader: 0 Replicas: 0 Isr: 0
Topic: events Partition: 13 Leader: 0 Replicas: 0 Isr: 0
Topic: events Partition: 14 Leader: 0 Replicas: 0 Isr: 0
【问题讨论】:
-
您确定 ZooKeeper 正在运行吗?而且我假设您不使用 Kafka Mesos 框架,是吗?
-
是的,zookeeper 正在运行。我们不使用 kafka mesos 框架。
-
好的。您选择不使用该框架有什么原因?
-
我们当时没有看到在 mesos 上运行 kafka 的令人信服的理由。我们现在只在 mesos 上运行自定义应用程序。
-
我修复了它,但不是以理想的方式。我不得不关闭代理,删除日志,删除 ZK 中的 kafka 条目并重新创建主题。然后,我使用 bin 文件夹中的脚本运行了一个测试生产者和消费者。然后我就可以启动我的 java 消费者了。但这不是修复生产环境的好方法。
标签: apache-kafka mesos