Andrew Olson created KAFKA-3228: ----------------------------------- Summary: Partition reassignment failure for brokers freshly added to cluster Key: KAFKA-3228 URL: https://issues.apache.org/jira/browse/KAFKA-3228 Project: Kafka Issue Type: Bug Components: controller Affects Versions: 0.8.2.1 Reporter: Andrew Olson Assignee: Neha Narkhede
After adding about new 20 brokers to double the size of an existing production Kafka deployment, when attempting to rebalance partitions we were initially unable to reassign any partitions to 5 of the 20. The controller broker logged error messages like: {noformat} ERROR kafka.controller.KafkaController: [Controller 19]: Error completing reassignment of partition [TOPIC-NAME,2] kafka.common.KafkaException: Only 4,33 replicas out of the new set of replicas 4,34,33 for partition [TOPIC-NAME,2] to be reassigned are alive. Failing partition reassignment at kafka.controller.KafkaController.initiateReassignReplicasForTopicPartition(KafkaController.scala:611) at kafka.controller.PartitionsReassignedListener$$anonfun$handleDataChange$4$$anonfun$apply$6.apply$mcV$sp(KafkaController.scala:1203) at kafka.controller.PartitionsReassignedListener$$anonfun$handleDataChange$4$$anonfun$apply$6.apply(KafkaController.scala:1197) at kafka.controller.PartitionsReassignedListener$$anonfun$handleDataChange$4$$anonfun$apply$6.apply(KafkaController.scala:1197) at kafka.utils.Utils$.inLock(Utils.scala:535) at kafka.controller.PartitionsReassignedListener$$anonfun$handleDataChange$4.apply(KafkaController.scala:1196) at kafka.controller.PartitionsReassignedListener$$anonfun$handleDataChange$4.apply(KafkaController.scala:1195) at scala.collection.immutable.HashMap$HashMap1.foreach(HashMap.scala:224) at scala.collection.immutable.HashMap$HashTrieMap.foreach(HashMap.scala:403) at kafka.controller.PartitionsReassignedListener.handleDataChange(KafkaController.scala:1195) at org.I0Itec.zkclient.ZkClient$7.run(ZkClient.java:751) at org.I0Itec.zkclient.ZkEventThread.run(ZkEventThread.java:71) {noformat} We reattempted the reassignment to one of these new brokers, with the same result. We also saw these messages in the controller's log. There was a "Broken pipe" error for each of the new brokers. {noformat} 2016-02-09 12:13:22,082 WARN kafka.controller.RequestSendThread: [Controller-19-to-broker-34-send-thread], Controller 19 epoch 28 fails to send request Name:UpdateMetadataRequest... java.io.IOException: Broken pipe at sun.nio.ch.FileDispatcherImpl.writev0(Native Method) at sun.nio.ch.SocketDispatcher.writev(SocketDispatcher.java:51) at sun.nio.ch.IOUtil.write(IOUtil.java:148) at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:504) at java.nio.channels.SocketChannel.write(SocketChannel.java:502) at kafka.network.BoundedByteBufferSend.writeTo(BoundedByteBufferSend.scala:56) at kafka.network.Send$class.writeCompletely(Transmission.scala:75) at kafka.network.BoundedByteBufferSend.writeCompletely(BoundedByteBufferSend.scala:26) at kafka.network.BlockingChannel.send(BlockingChannel.scala:103) at kafka.controller.RequestSendThread.liftedTree1$1(ControllerChannelManager.scala:132) at kafka.controller.RequestSendThread.doWork(ControllerChannelManager.scala:131) at kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:60) {noformat} {noformat} WARN kafka.controller.RequestSendThread: [Controller-19-to-broker-34-send-thread], Controller 19 epoch 28 fails to send request Name:UpdateMetadataRequest... to broker id:34... Reconnecting to broker. java.io.EOFException: Received -1 when reading from channel, socket has likely been closed. at kafka.utils.Utils$.read(Utils.scala:381) at kafka.network.BoundedByteBufferReceive.readFrom(BoundedByteBufferReceive.scala:54) at kafka.network.Receive$class.readCompletely(Transmission.scala:56) at kafka.network.BoundedByteBufferReceive.readCompletely(BoundedByteBufferReceive.scala:29) at kafka.network.BlockingChannel.receive(BlockingChannel.scala:111) at kafka.controller.RequestSendThread.liftedTree1$1(ControllerChannelManager.scala:133) at kafka.controller.RequestSendThread.doWork(ControllerChannelManager.scala:131) at kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:60) {noformat} {noformat} INFO kafka.controller.RequestSendThread: [Controller-19-to-broker-34-send-thread], Controller 19 connected to id:34... for sending state change requests {noformat} There were no error messages in the new broker log files, just the normal startup logs. A jstack did not reveal anything unusual with the threads, and using netstat the network connections looked normal. We're running version 0.8.2.1. The new brokers were simultaneously started using a broadcast-style command. However we also had the same issue with a different Kafka cluster after starting up the new brokers individually about 30 seconds apart. After stopping and restarting the new brokers, the reassignment was then successful, and they are now functioning normally. -- This message was sent by Atlassian JIRA (v6.3.4#6332)