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 @@

Notable changes in 3
  • The Apache Zookeeper dependency has been upgraded to 3.8.1 due to 3.6 reaching end-of-life. To bring both your Kafka and Zookeeper clusters to the latest versions:
      -
    • >=2.4 Kafka clusters can be updated directly. +
    • >=2.4 Kafka clusters can be updated directly. Zookeeper clusters which are running binaries bundled with Kafka versions 2.4 or above can be updated directly.
    • -
    • <2.4 Kafka clusters first need to be updated to a version greater than 2.4 and smaller than 3.6. +
    • <2.4 Kafka clusters first need to be updated to a version greater than 2.4 and smaller than 3.6. Zookeeper clusters which are running binaries bundled with Kafka versions below 2.4 need to be updated to any binaries bundled with Kafka versions greater than 2.4 and smaller than 3.6. You can then follow the first bullet-point.
    @@ -688,6 +688,10 @@
    Notable changes in 3 The configuration can also be updated dynamically and is applied to the broker. Workloads running on version 3.6.0 with compression can experience InvalidRecordExceptions and UnknownServerExceptions. Upgrading to 3.6.1 or newer or disabling the feature fixes the issue.
  • +
  • The 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. +
  • Upgrading to 3.5.2 from any version 0.8.x through 3.4.x