Henning Treu created KAFKA-8946:
-----------------------------------

             Summary: Single byte header breaks parsing
                 Key: KAFKA-8946
                 URL: https://issues.apache.org/jira/browse/KAFKA-8946
             Project: Kafka
          Issue Type: Improvement
          Components: KafkaConnect
    Affects Versions: 2.3.0
            Reporter: Henning Treu


Setting a single byte header like
{code:java}
headers.add("MY_CUSTOM_HEADER", new byte[] { 1 });
{code}

will cause a WARN message with full stack trace:

{code:java}
[2019-08-29 06:27:40,599] WARN Failed to deserialize value for header 
'MY_CUSTOM_HEADER' on topic '<my_kafka_topic>', so using byte array 
(org.apache.kafka.connect.storage.SimpleHeaderConverter)
java.lang.StringIndexOutOfBoundsException: String index out of range: 0
at java.lang.String.charAt(String.java:658)
at org.apache.kafka.connect.data.Values.parse(Values.java:816)
at org.apache.kafka.connect.data.Values.parseString(Values.java:373)
at 
org.apache.kafka.connect.storage.SimpleHeaderConverter.toConnectHeader(SimpleHeaderConverter.java:64)
at 
org.apache.kafka.connect.runtime.WorkerSinkTask.convertHeadersFor(WorkerSinkTask.java:501)
at 
org.apache.kafka.connect.runtime.WorkerSinkTask.convertMessages(WorkerSinkTask.java:469)
at org.apache.kafka.connect.runtime.WorkerSinkTask.poll(WorkerSinkTask.java:301)
at 
org.apache.kafka.connect.runtime.WorkerSinkTask.iteration(WorkerSinkTask.java:205)
at 
org.apache.kafka.connect.runtime.WorkerSinkTask.execute(WorkerSinkTask.java:173)
at org.apache.kafka.connect.runtime.WorkerTask.doRun(WorkerTask.java:170)
at org.apache.kafka.connect.runtime.WorkerTask.run(WorkerTask.java:214)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
{code}

Since Kafka will continue with the headers as 
{code:java}
Schema.BYTES_SCHEMA
{code}
 the warning seems a little harsh.

There are two options:

# Handle none-String header values explicitly
# Drop the stacktrace logging and put it to an extra DEBUG log



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to