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的主要内容,如果未能解决你的问题,请参考以下文章

Druid.io系列:数据摄入

用德鲁伊摄取 2 位数的年份?

如何从 kafka 中的两个生产者那里摄取数据并使用 Spark 结构化流加入?

Druid:通过 Kafka 加载流数据

Druid:通过 Kafka 加载流数据

kafka + spark Streaming + Tranquility Server发送数据到druid