Druid Kafka 摄取(imply-2.2.3):kafka 错误 NoReplicaOnlineException
Posted
技术标签:
【中文标题】Druid Kafka 摄取(imply-2.2.3):kafka 错误 NoReplicaOnlineException【英文标题】:Druid Kafka ingestion (imply-2.2.3): kafka error NoReplicaOnlineException 【发布时间】:2017-08-03 09:37:36 【问题描述】:我使用Druid Kafka Indexing 服务从 Kafka 加载我自己的流。
我使用Load from Kafka tutorial来实现它。
Kafka 默认拥有所有设置(刚刚从 tgz 中提取)。
当我用空数据启动 imply-2.2.3 (Druid) 时(在 var 删除文件夹之后)一切正常。
但是当我停止 Kafka 2.11-0.10.2.0 并再次启动它时会发生错误,并且 Druid Kafka 摄取不再起作用,直到我停止 Imply(Druid) 并删除所有数据(即删除 var 文件夹)。
有时 Druid 只是不从 Kafka 中提取数据,即使 Kafka 中没有错误。 当我删除 Druid 中的 var 文件夹时,所有内容都会被修复,直到下一个相同的错误。
错误:
kafka.common.NoReplicaOnlineException: No replica for partition [__consumer_offsets,19] is alive. Live brokers are: [Set()], Assigned replicas are: [List(0)]
at kafka.controller.OfflinePartitionLeaderSelector.selectLeader(PartitionLeaderSelector.scala:73) ~[kafka_2.11-0.10.2.0.jar:?]
at kafka.controller.PartitionStateMachine.electLeaderForPartition(PartitionStateMachine.scala:339) ~[kafka_2.11-0.10.2.0.jar:?]
at kafka.controller.PartitionStateMachine.kafka$controller$PartitionStateMachine$$handleStateChange(PartitionStateMachine.scala:200) [kafka_2.11-0.10.2.0.jar:?]
at kafka.controller.PartitionStateMachine$$anonfun$triggerOnlinePartitionStateChange$3.apply(PartitionStateMachine.scala:115) [kafka_2.11-0.10.2.0.jar:?]
at kafka.controller.PartitionStateMachine$$anonfun$triggerOnlinePartitionStateChange$3.apply(PartitionStateMachine.scala:112) [kafka_2.11-0.10.2.0.jar:?]
at scala.collection.TraversableLike$WithFilter$$anonfun$foreach$1.apply(TraversableLike.scala:733) [scala-library-2.11.8.jar:?]
at scala.collection.mutable.HashMap$$anonfun$foreach$1.apply(HashMap.scala:99) [scala-library-2.11.8.jar:?]
at scala.collection.mutable.HashMap$$anonfun$foreach$1.apply(HashMap.scala:99) [scala-library-2.11.8.jar:?]
at scala.collection.mutable.HashTable$class.foreachEntry(HashTable.scala:230) [scala-library-2.11.8.jar:?]
at scala.collection.mutable.HashMap.foreachEntry(HashMap.scala:40) [scala-library-2.11.8.jar:?]
at scala.collection.mutable.HashMap.foreach(HashMap.scala:99) [scala-library-2.11.8.jar:?]
at scala.collection.TraversableLike$WithFilter.foreach(TraversableLike.scala:732) [scala-library-2.11.8.jar:?]
at kafka.controller.PartitionStateMachine.triggerOnlinePartitionStateChange(PartitionStateMachine.scala:112) [kafka_2.11-0.10.2.0.jar:?]
at kafka.controller.PartitionStateMachine.startup(PartitionStateMachine.scala:67) [kafka_2.11-0.10.2.0.jar:?]
at kafka.controller.KafkaController.onControllerFailover(KafkaController.scala:342) [kafka_2.11-0.10.2.0.jar:?]
at kafka.controller.KafkaController$$anonfun$1.apply$mcV$sp(KafkaController.scala:160) [kafka_2.11-0.10.2.0.jar:?]
at kafka.server.ZookeeperLeaderElector.elect(ZookeeperLeaderElector.scala:85) [kafka_2.11-0.10.2.0.jar:?]
at kafka.server.ZookeeperLeaderElector$$anonfun$startup$1.apply$mcZ$sp(ZookeeperLeaderElector.scala:51) [kafka_2.11-0.10.2.0.jar:?]
at kafka.server.ZookeeperLeaderElector$$anonfun$startup$1.apply(ZookeeperLeaderElector.scala:49) [kafka_2.11-0.10.2.0.jar:?]
at kafka.server.ZookeeperLeaderElector$$anonfun$startup$1.apply(ZookeeperLeaderElector.scala:49) [kafka_2.11-0.10.2.0.jar:?]
at kafka.utils.CoreUtils$.inLock(CoreUtils.scala:213) [kafka_2.11-0.10.2.0.jar:?]
at kafka.server.ZookeeperLeaderElector.startup(ZookeeperLeaderElector.scala:49) [kafka_2.11-0.10.2.0.jar:?]
at kafka.controller.KafkaController$$anonfun$startup$1.apply$mcV$sp(KafkaController.scala:681) [kafka_2.11-0.10.2.0.jar:?]
at kafka.controller.KafkaController$$anonfun$startup$1.apply(KafkaController.scala:677) [kafka_2.11-0.10.2.0.jar:?]
at kafka.controller.KafkaController$$anonfun$startup$1.apply(KafkaController.scala:677) [kafka_2.11-0.10.2.0.jar:?]
at kafka.utils.CoreUtils$.inLock(CoreUtils.scala:213) [kafka_2.11-0.10.2.0.jar:?]
at kafka.controller.KafkaController.startup(KafkaController.scala:677) [kafka_2.11-0.10.2.0.jar:?]
at kafka.server.KafkaServer.startup(KafkaServer.scala:224) [kafka_2.11-0.10.2.0.jar:?]
at kafka.server.KafkaServerStartable.startup(KafkaServerStartable.scala:39) [kafka_2.11-0.10.2.0.jar:?]
at kafka.Kafka$.main(Kafka.scala:67) [kafka_2.11-0.10.2.0.jar:?]
at kafka.Kafka.main(Kafka.scala) [kafka_2.11-0.10.2.0.jar:?]
我做的步骤:
1.开始暗示:
bin/supervise -c conf/supervise/quickstart.conf
2。启动 Kafka:
./bin/kafka-server-start.sh config/server.properties
3.创建主题:
./bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic wikiticker
4.启用 Druid Kafka 摄取:
curl -XPOST -H'Content-Type: application/json' -d @quickstart/wikiticker-kafka-supervisor.json http://localhost:8090/druid/indexer/v1/supervisor
5.向 Kafka 主题发布事件,然后由 Kafka 索引服务将这些事件摄取到 Druid 中
在所有 .properties 文件(common.runtime.properties、broker、coordinator、history、middlemanager、overlord)中添加了属性:
druid.extensions.loadList=["druid-caffeine-cache", "druid-histogram", "druid-datasketches", "druid-kafka-indexing-service"]
其中包括“druid-kafka-indexing-service”来提供摄取服务。
我相信Druid Kafka Indexing不应该出现这样的问题。
有没有办法解决这个问题?
【问题讨论】:
【参考方案1】:该消息表明 id 为 0 的代理已关闭,因为它是唯一托管该分区的代理,所以您现在无法使用该分区。您必须确保代理 0 已启动并提供服务。
【讨论】:
【参考方案2】:看起来您有一个单节点 Kafka 集群,并且唯一的代理节点已关闭。这不是一个非常容错的设置。您应该有 3 个 Kafka 代理并设置所有复制因子为 3 的主题,这样即使一两个 Kafka 代理关闭,系统也能正常工作。单节点集群通常仅用于开发。
【讨论】:
【参考方案3】:我通过添加 3 个 Kafka 代理并设置所有主题的复制因子为 3 以实现 Kafka 稳定性来修复它。
在 Druid 中,我通过在 middleManager 中增加 druid.worker.capacity
并在主管规范的 ioConfig
中减少 taskDuration
来解决问题。
another question 中的详细信息。
【讨论】:
以上是关于Druid Kafka 摄取(imply-2.2.3):kafka 错误 NoReplicaOnlineException的主要内容,如果未能解决你的问题,请参考以下文章