Lucas Bradstreet created KAFKA-12791: ----------------------------------------
Summary: ConcurrentModificationException in KafkaProducer constructor Key: KAFKA-12791 URL: https://issues.apache.org/jira/browse/KAFKA-12791 Project: Kafka Issue Type: Bug Reporter: Lucas Bradstreet Recently we have noticed multiple instances where KafkaProducers have failed to constructe due to the following exception: {noformat} org.apache.kafka.common.KafkaException: Failed to construct kafka producer at org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:440) at org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:291) at org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:318) java.base/java.lang.Thread.run(Thread.java:832) Caused by: java.util.ConcurrentModificationException at java.base/java.util.HashMap$HashIterator.nextNode(HashMap.java:1584) at java.base/java.util.HashMap$KeyIterator.next(HashMap.java:1607) at java.base/java.util.AbstractSet.removeAll(AbstractSet.java:171) at org.apache.kafka.common.config.AbstractConfig.unused(AbstractConfig.java:221) at org.apache.kafka.common.config.AbstractConfig.logUnused(AbstractConfig.java:379) at org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:433) ... 9 more exception.class:org.apache.kafka.common.KafkaException exception.message:Failed to construct kafka producer {noformat} It appears that this is due to the fact that `used` below is a synchronized set: {code:java} public Set<String> unused() { Set<String> keys = new HashSet<>(originals.keySet()); keys.removeAll(used); return keys; }{code} It appears that `used` is being modified while removeAll is being called. This may be due to the way that keys are added to it when used: {code:java} protected Object get(String key) { if (!values.containsKey(key)) throw new ConfigException(String.format("Unknown configuration '%s'", key)); used.add(key); return values.get(key); }{code} -- This message was sent by Atlassian Jira (v8.3.4#803005)