如何使用一个Kafka代理从NoReplicaOnlineException恢复?

Mik*_*sen 8 message-queue apache-kafka

我们在开发实验室中设置了一个非常简单的Kafka 0.8.1.1.它只是一个节点.我们会定期遇到这个错误:

[2015-08-10 13:45:52,405] ERROR Controller 0 epoch 488 initiated state change for partition [test-data,1] from OfflinePartition to OnlinePartition failed (state.change.logger)
kafka.common.NoReplicaOnlineException: No replica for partition [test-data,1] is alive. Live brokers are: [Set()], Assigned replicas are: [List(0)]
        at kafka.controller.OfflinePartitionLeaderSelector.selectLeader(PartitionLeaderSelector.scala:61)
        at kafka.controller.PartitionStateMachine.electLeaderForPartition(PartitionStateMachine.scala:336)
        at kafka.controller.PartitionStateMachine.kafka$controller$PartitionStateMachine$$handleStateChange(PartitionStateMachine.scala:185)
        at kafka.controller.PartitionStateMachine$$anonfun$triggerOnlinePartitionStateChange$3.apply(PartitionStateMachine.scala:99)
        at kafka.controller.PartitionStateMachine$$anonfun$triggerOnlinePartitionStateChange$3.apply(PartitionStateMachine.scala:96)
        at scala.collection.TraversableLike$WithFilter$$anonfun$foreach$1.apply(TraversableLike.scala:743)
Run Code Online (Sandbox Code Playgroud)

任何人都可以推荐一种从中恢复的策略吗?有这样的事情还是我们需要构建另一个或两个节点并在我们的主题上设置复制因子来覆盖我们放入集群的所有节点?

我们有3个zookeeper节点对Storm和HBase等其他应用程序响应非常好,因此我们非常有信心ZooKeeper不应该归咎于此.有任何想法吗?

Den*_*din -1

这个问题是关于 Kafka 0.8 的,如果我没记错的话,应该已经不再支持了。然而,对于未来的读者来说,以下指南应该是相关的:

  1. 如果您关心稳定性、正常运行时间、可靠性或这个大方向上的任何事情,请确保您至少有 3 个 kafka 节点。
  2. 如果您在旧的kafka版本中遇到问题,请认真考虑升级到最新的kafka版本。在撰写本文时,我们已经处于 Kafka 2 阶段