KRISHNA SARVEPALLI created KAFKA-10791:
------------------------------------------
Summary: Kafka Metadata older epoch problem
Key: KAFKA-10791
URL: https://issues.apache.org/jira/browse/KAFKA-10791
Project: Kafka
Issue Type: Bug
Components: clients
Affects Versions: 2.2.0
Environment: Kubernetes cluster,
Reporter: KRISHNA SARVEPALLI
Attachments: Kafka-Client-Issue.png, zookeeper-leader-epoch.png,
zookeeper-state.png
We are using Kafka in production with 5 brokers and 3 zookeepers. We are
running Kafka and zookeeper in Kubernetes and storage is managed by PVC using
NFS. We are using topic with 60 partitions.
The cluster was running successfully from almost 50 days since the last
restart. Last week (11/28) two brokers were down. Team is still researching for
the root cause of broker failures.
Since we are using K8s the brokers came back up immediately (in less than
5minutes). But we have issue on the producer applications and consumer
applications while downloading the metadata. Please check the attached images.
We have enabled debug logs for one of the applications and it seems like Kafka
brokers are returning metadata with leader_epoch value of 0 where as in the
client Metadata cache it was maintained at 6 for most of the partitions.
Eventually we are forced to restart all the producer apps (around 35-40 micro
services) and they are all able to download the metadata since it's first time
didn't face any issue and was able to produce the messages.
As part of troubleshooting, we have checked the zookeeper key/value pairs
registered by Kafka and we can see that leader_epoch was set back to 0 for
almost all partitions. And we have checked for another topic which is used by
other apps, their leader_epoch was in good shape and ctime and mtime are also
updated correctly. Please check the attached screenshots.
Please refer the stackoverflow issue that we have reported:
https://stackoverflow.com/questions/65055299/kafka-producer-not-able-to-download-refresh-metadata-after-brokers-were-restar
+*Broker Configs:*+
--override zookeeper.connect=zookeeper:2181
--override advertised.listeners=PLAINTEXT://kafka,SASL_SSL://kafka
--override log.dirs=/opt/kafka/data/logs
--override broker.id=kafka
--override num.network.threads=3
--override num.io.threads=8
--override default.replication.factor=3
--override auto.create.topics.enable=true
--override delete.topic.enable=true
--override socket.send.buffer.bytes=102400
--override socket.receive.buffer.bytes=102400
--override socket.request.max.bytes=104857600
--override num.partitions=30
--override num.recovery.threads.per.data.dir=1
--override offsets.topic.replication.factor=3
--override transaction.state.log.replication.factor=3
--override transaction.state.log.min.isr=1
--override log.retention.hours=48
--override log.segment.bytes=1073741824
--override log.retention.check.interval.ms=300000
--override zookeeper.connection.timeout.ms=6000
--override confluent.support.metrics.enable=true
--override group.initial.rebalance.delay.ms=0
--override confluent.support.customer.id=anonymous
--override ssl.truststore.location=kafka.broker.truststore.jks
--override ssl.truststore.password=changeit
--override ssl.keystore.location=kafka.broker.keystore.jks
--override ssl.keystore.password=changeit
--override ssl.keystore.type=PKCS12
--override ssl.key.password=changeit
--override listeners=SASL_SSL://0.0.0.0:9093,PLAINTEXT://0.0.0.0:9092
--override authorizer_class_name=kafka.security.auth.SimpleAclAuthorizer
--override ssl.endpoint.identification.algorithm
--override ssl.client.auth=requested
--override sasl.enabled.mechanisms=SCRAM-SHA-512
--override sasl.mechanism.inter.broker.protocol=SCRAM-SHA-512
--override security.inter.broker.protocol=SASL_SSL
--override super.users=test:test
--override zookeeper.set.acl=false
--
This message was sent by Atlassian Jira
(v8.3.4#803005)