Let me rephrase my issue. Issue occur when broker loose connectivity to zookeeper server. Connectivity loss can happen due to many reasons…zookeeper servers getting bounced, due to some network glitch etc…
After the brokers reconnect to zookeeper server I expect the kafka cluster to come back in stable state by itself without any manual intervention. but instead few partitions remain under replicated due to the error I pasted earlier. I feel this is some kind of bug. I am going to file a bug. Thanks, Dhirendra. From: Thomas Cooper <c...@tomcooper.dev> Sent: Friday, March 4, 2022 7:01 PM To: Dhirendra Singh <dhirendr...@gmail.com> Cc: users@kafka.apache.org Subject: Re: Few partitions stuck in under replication Do you roll the controller last? I suspect this is more to do with the way you are rolling the cluster (which I am still not clear on the need for) rather than some kind of bug in Kafka (though that could of course be the case). Tom On 04/03/2022 01:59, Dhirendra Singh wrote: Hi Tom, During the rolling restart we check for under replicated partition count to be zero in the readiness probe before restarting the next POD in order. This issue never occurred before. It started after we upgraded kafka version from 2.5.0 to 2.7.1. So i suspect some bug introduced in the version after 2.5.0. Thanks, Dhirendra. On Thu, Mar 3, 2022 at 11:09 PM Thomas Cooper <c...@tomcooper.dev <mailto:c...@tomcooper.dev> > wrote: I suspect this nightly rolling will have something to do with your issues. If you are just rolling the stateful set in order, with no dependence on maintaining minISR and other Kafka considerations you are going to hit issues. If you are running on Kubernetes I would suggest using an Operator like Strimzi <https://strimzi.io/> which will do a lot of the Kafka admin tasks like this for you automatically. Tom On 03/03/2022 16:28, Dhirendra Singh wrote: Hi Tom, Doing the nightly restart is the decision of the cluster admin. I have no control on it. We have implementation using stateful set. restart is triggered by updating a annotation in the pod. Issue is not triggered by kafka cluster restart but the zookeeper servers restart. Thanks, Dhirendra. On Thu, Mar 3, 2022 at 7:19 PM Thomas Cooper <c...@tomcooper.dev <mailto:c...@tomcooper.dev> > wrote: Hi Dhirenda, Firstly, I am interested in why are you restarting the ZK and Kafka cluster every night? Secondly, how are you doing the restarts. For example, in [Strimzi](https://strimzi.io/), when we roll the Kafka cluster we leave the designated controller broker until last. For each of the other brokers we wait until all the partitions they are leaders for are above their minISR and then we roll the broker. In this way we maintain availability and make sure leadership can move off the rolling broker temporarily. Cheers, Tom Cooper [@tomncooper](https://twitter.com/tomncooper) | https://tomcooper.dev On 03/03/2022 07:38, Dhirendra Singh wrote: > Hi All, > > We have kafka cluster running in kubernetes. kafka version we are using is > 2.7.1. > Every night zookeeper servers and kafka brokers are restarted. > After the nightly restart of the zookeeper servers some partitions remain > stuck in under replication. This happens randomly but not at every nightly > restart. > Partitions remain under replicated until kafka broker with the partition > leader is restarted. > For example partition 4 of consumer_offsets topic remain under replicated > and we see following error in the log... > > [2022-02-28 04:01:20,217] WARN [Partition __consumer_offsets-4 broker=1] > Controller failed to update ISR to PendingExpandIsr(isr=Set(1), > newInSyncReplicaId=2) due to unexpected UNKNOWN_SERVER_ERROR. Retrying. > (kafka.cluster.Partition) > [2022-02-28 04:01:20,217] ERROR [broker-1-to-controller] Uncaught error in > request completion: (org.apache.kafka.clients.NetworkClient) > java.lang.IllegalStateException: Failed to enqueue `AlterIsr` request with > state LeaderAndIsr(leader=1, leaderEpoch=2728, isr=List(1, 2), > zkVersion=4719) for partition __consumer_offsets-4 > at kafka.cluster.Partition.sendAlterIsrRequest(Partition.scala:1403) > at > kafka.cluster.Partition.$anonfun$handleAlterIsrResponse$1(Partition.scala:1438) > at kafka.cluster.Partition.handleAlterIsrResponse(Partition.scala:1417) > at > kafka.cluster.Partition.$anonfun$sendAlterIsrRequest$1(Partition.scala:1398) > at > kafka.cluster.Partition.$anonfun$sendAlterIsrRequest$1$adapted(Partition.scala:1398) > at > kafka.server.AlterIsrManagerImpl.$anonfun$handleAlterIsrResponse$8(AlterIsrManager.scala:166) > at > kafka.server.AlterIsrManagerImpl.$anonfun$handleAlterIsrResponse$8$adapted(AlterIsrManager.scala:163) > at scala.collection.immutable.List.foreach(List.scala:333) > at > kafka.server.AlterIsrManagerImpl.handleAlterIsrResponse(AlterIsrManager.scala:163) > at > kafka.server.AlterIsrManagerImpl.responseHandler$1(AlterIsrManager.scala:94) > at > kafka.server.AlterIsrManagerImpl.$anonfun$sendRequest$2(AlterIsrManager.scala:104) > at > kafka.server.BrokerToControllerRequestThread.handleResponse(BrokerToControllerChannelManagerImpl.scala:175) > at > kafka.server.BrokerToControllerRequestThread.$anonfun$generateRequests$1(BrokerToControllerChannelManagerImpl.scala:158) > at > org.apache.kafka.clients.ClientResponse.onComplete(ClientResponse.java:109) > at > org.apache.kafka.clients.NetworkClient.completeResponses(NetworkClient.java:586) > at org.apache.kafka.clients.NetworkClient.poll(NetworkClient.java:578) > at kafka.common.InterBrokerSendThread.doWork(InterBrokerSendThread.scala:71) > at > kafka.server.BrokerToControllerRequestThread.doWork(BrokerToControllerChannelManagerImpl.scala:183) > at kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:96) > Looks like some kind of race condition bug...anyone has any idea ? > > Thanks, > Dhirendra -- Tom Cooper @tomncooper <https://twitter.com/tomncooper> | tomcooper.dev <https://tomcooper.dev> -- Tom Cooper @tomncooper <https://twitter.com/tomncooper> | tomcooper.dev <https://tomcooper.dev>