Jeff Larsen created KAFKA-5098:
----------------------------------

             Summary: KafkaProducer.send() blocks and generates 
TimeoutException if topic name has illegal char
                 Key: KAFKA-5098
                 URL: https://issues.apache.org/jira/browse/KAFKA-5098
             Project: Kafka
          Issue Type: Bug
          Components: producer 
    Affects Versions: 0.10.2.0
         Environment: Java client running against server using 
wurstmeister/kafka Docker image.
            Reporter: Jeff Larsen


The server is running with auto create enabled. If we try to publish to a topic 
with a forward slash in the name, the call blocks and we get a TimeoutException 
in the Callback. I would expect it to return immediately with an 
InvalidTopicException.

There are other blocking issues that have been reported which may be related to 
some degree, but this particular cause seems unrelated.

Sample code:

{code}
import org.apache.kafka.clients.producer.*;
import java.util.*;

public class KafkaProducerUnexpectedBlockingAndTimeoutException {

  public static void main(String[] args) {
    Properties props = new Properties();
    props.put("bootstrap.servers", "kafka.example.com:9092");
    props.put("key.serializer", 
"org.apache.kafka.common.serialization.StringSerializer");
    props.put("value.serializer", 
"org.apache.kafka.common.serialization.StringSerializer");
    props.put("max.block.ms", 10000); // 10 seconds should illustrate our point

    String separator = "/";
    //String separator = "_";

    try (Producer<String, String> producer = new KafkaProducer<>(props)) {

      System.out.println("Calling KafkaProducer.send() at " + new Date());
      producer.send(
          new ProducerRecord<String, String>("abc" + separator + 
"someStreamName",
              "Not expecting a TimeoutException here"),
          new Callback() {
            @Override
            public void onCompletion(RecordMetadata metadata, Exception e) {
              if (e != null) {
                System.out.println(e.toString());
              }
            }
          });
      System.out.println("KafkaProducer.send() completed at " + new Date());
    }


  }

}
{code}

Switching to the underscore separator in the above example works as expected.

Mea culpa: We neglected to research allowed chars in a topic name, but the 
TimeoutException we encountered did not help point us in the right direction.





--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to