Details
-
Improvement
-
Status: Patch Available
-
Minor
-
Resolution: Unresolved
-
2.3.0
-
None
-
None
Description
Setting a single byte header like
headers.add("MY_CUSTOM_HEADER", new byte[] { 1 });
will cause a WARN message with full stack trace:
[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)
Since Kafka will continue with the headers as
Schema.BYTES_SCHEMA
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
Attachments
Attachments
Issue Links
- links to