[ 
https://issues.apache.org/jira/browse/KAFKA-3088?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15110812#comment-15110812
 ] 

Ismael Juma commented on KAFKA-3088:
------------------------------------

Since clientId is used in quotas, logging and a few other places, it is a good 
practice to pass one. There are two possible paths here:

1. Change `null` to an empty String internally and avoid this and other NPEs as 
the code generally assumes that clientId is not null.
2. Make clientId a required field, throw a more meaningful error and add a note 
to the upgrade notes.

Some additional information, the clientId is generated by the Java clients if 
not provided by the user like the following:

* "consumer-" + CONSUMER_CLIENT_ID_SEQUENCE.getAndIncrement()
* "producer-" + PRODUCER_CLIENT_ID_SEQUENCE.getAndIncrement();

Also, it's interesting the the old Consumer used the following regex to 
validate the clientId (while the new clients don't seem to do any validation): 
"[a-zA-Z0-9\\._\\-]".

Thoughts [~ewencp] [~guozhang]?

> 0.9.0.0 broker crash on receipt of produce request with empty client ID
> -----------------------------------------------------------------------
>
>                 Key: KAFKA-3088
>                 URL: https://issues.apache.org/jira/browse/KAFKA-3088
>             Project: Kafka
>          Issue Type: Bug
>          Components: producer 
>    Affects Versions: 0.9.0.0
>            Reporter: Dave Peterson
>            Assignee: Jun Rao
>
> Sending a produce request with an empty client ID to a 0.9.0.0 broker causes 
> the broker to crash as shown below.  More details can be found in the 
> following email thread:
> http://mail-archives.apache.org/mod_mbox/kafka-users/201601.mbox/%3c5693ecd9.4050...@dspeterson.com%3e
>    [2016-01-10 23:03:44,957] ERROR [KafkaApi-3] error when handling request 
> Name: ProducerRequest; Version: 0; CorrelationId: 1; ClientId: null; 
> RequiredAcks: 1; AckTimeoutMs: 10000 ms; TopicAndPartition: [topic_1,3] -> 37 
> (kafka.server.KafkaApis)
>    java.lang.NullPointerException
>           at 
> org.apache.kafka.common.metrics.JmxReporter.getMBeanName(JmxReporter.java:127)
>           at 
> org.apache.kafka.common.metrics.JmxReporter.addAttribute(JmxReporter.java:106)
>           at 
> org.apache.kafka.common.metrics.JmxReporter.metricChange(JmxReporter.java:76)
>           at 
> org.apache.kafka.common.metrics.Metrics.registerMetric(Metrics.java:288)
>           at org.apache.kafka.common.metrics.Sensor.add(Sensor.java:177)
>           at org.apache.kafka.common.metrics.Sensor.add(Sensor.java:162)
>           at 
> kafka.server.ClientQuotaManager.getOrCreateQuotaSensors(ClientQuotaManager.scala:209)
>           at 
> kafka.server.ClientQuotaManager.recordAndMaybeThrottle(ClientQuotaManager.scala:111)
>           at 
> kafka.server.KafkaApis.kafka$server$KafkaApis$$sendResponseCallback$2(KafkaApis.scala:353)
>           at 
> kafka.server.KafkaApis$$anonfun$handleProducerRequest$1.apply(KafkaApis.scala:371)
>           at 
> kafka.server.KafkaApis$$anonfun$handleProducerRequest$1.apply(KafkaApis.scala:371)
>           at 
> kafka.server.ReplicaManager.appendMessages(ReplicaManager.scala:348)
>           at kafka.server.KafkaApis.handleProducerRequest(KafkaApis.scala:366)
>           at kafka.server.KafkaApis.handle(KafkaApis.scala:68)
>           at 
> kafka.server.KafkaRequestHandler.run(KafkaRequestHandler.scala:60)
>           at java.lang.Thread.run(Thread.java:745)



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to