【问题标题】:How to recover from NoReplicaOnlineException with one Kafka broker?如何使用一个 Kafka 代理从 NoReplicaOnlineException 中恢复?
【发布时间】:2015-11-02 17:54:10
【问题描述】:

我们的开发实验室设置了一个非常简单的 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)

谁能推荐一个从中恢复的策略?是否有这样的事情,或者我们是否需要构建另一个或两个节点并在我们的主题上设置复制因子以覆盖我们放入集群中的所有节点?

我们有 3 个 zookeeper 节点,它们对 Storm 和 HBase 等其他应用程序响应非常好,因此我们非常有信心 ZooKeeper 不会在这里受到责备。有什么想法吗?

【问题讨论】:

  • “从 NROE 中恢复”是什么意思?异常后代理运行正常吗?
  • 奇怪的是代理似乎运行得很好。我们在 server.log 中没有看到任何错误,但我们所有的主题都会在 state-change.log 中抛出该错误。重新启动服务没有帮助。我还将 ZK 超时增加到了相当荒谬的长度,这似乎也没有帮助。
  • 如果您找到解决方案,请告诉我。我经常遇到同样的问题。

标签: message-queue apache-kafka


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-25
    • 1970-01-01
    • 2017-03-09
    • 2020-02-08
    • 1970-01-01
    相关资源
    最近更新 更多