diff --git a/clients/src/main/java/org/apache/kafka/common/serialization/Deserializer.java b/clients/src/main/java/org/apache/kafka/common/serialization/Deserializer.java index 9fd8d50be744d..ad8d2bfe4d4f6 100644 --- a/clients/src/main/java/org/apache/kafka/common/serialization/Deserializer.java +++ b/clients/src/main/java/org/apache/kafka/common/serialization/Deserializer.java @@ -63,7 +63,15 @@ default T deserialize(String topic, Headers headers, byte[] data) { } /** - * Deserialize a record value from a ByteBuffer into a value or object. + * Deserialize a record value from a {@link ByteBuffer} into a value or object. + * + *
If {@code ByteBufferDeserializer} is used by an application, the application code cannot make any assumptions + * about the returned {@link ByteBuffer} like the position, limit, capacity, etc., or if it is backed by + * {@link ByteBuffer#hasArray() an array or not}. + * + *
Similarly, if this method is overridden, the implementation cannot make any assumptions about the + * passed in {@link ByteBuffer} either. + * * @param topic topic associated with the data * @param headers headers associated with the record; may be empty. * @param data serialized ByteBuffer; may be null; implementations are recommended to handle null by returning a value or null rather than throwing an exception. diff --git a/docs/upgrade.html b/docs/upgrade.html index 24e2886822027..56efaffbd04a0 100644 --- a/docs/upgrade.html +++ b/docs/upgrade.html @@ -656,9 +656,9 @@
ByteBufferDeserializer
(KIP-863)
+ was changed to avoid unnecessary deep-copies of data. This changes the behavior of the deserializer as user code cannot make any assumptions
+ about buffer position, limit, capacity any longer.
+