Table of Contents |
---|
Status
Current state: Under DiscussionAccepted
Discussion thread: thread1 thread2
JIRA: KAFKA-4514
Released: 2.1.0
Please keep the discussion on the mailing list rather than commenting on the wiki (wiki discussions get unwieldy fast).
...
We need to establish some backward-compatibility strategy for the case an old client subscribes a topic using ZStandard, explicitly or implicitly (i.e., 'compression.type' configuration of given topic is 'producer' and the producer compressed the records with ZStandard). After discussion, we decided to support zstd to the new clients only (i.e., uses v2 format) and return UNSUPPORTED_COMPRESSION_TYPE error for the old clients.
Here is the detailed strategy:
- Zstd will only be allowed with magic = 2 format. That is,
- Instantiating MemoryRecords with magic < 2 is disallowed.
- Down-conversion of zstd-compressed records will not be supported. So if the requested partition uses 'producer' compression codec and the client requests magic < 2, the broker will down-convert the batch until before using zstd and return with a dummy oversized record in place of the zstd-compressed batch. When the client attempts to fetch from then on, it will receive a UNSUPPORTED_COMPRESSION_TYPE error.
- Bump produce and fetch request versions. It will give the old clients a message to update their version.
- Zstd will only be allowed for the bumped produce API. That is, for older version .clients (=below KAFKA_2_1_IV0), we return UNSUPPORTED_COMPRESSION_TYPE regardless of the message format.
Zstd will only be allowed for the bumped fetch API. That is, if
Ifthe requested partition uses zstd and the client version is
below KAFKAbelow KAFKA_2_1_IV0,
returns UNSUPPORTEDwe return UNSUPPORTED_COMPRESSION_TYPE
errorregardless of the message format.
The following section explains why we chose this strategy.
...
The advantage of this approach is that we don't need to define a new error code; we can reuse it and that's all. The disadvantage of this approach is that it is also a little bit vague; This error code is defined as a work for KIP-98[^1] and now returned in the transaction error.
Since adding a new error type is not a big problem and a clear error message always helps, we decided to reject this strategy.
Related issues
This update introduces some related issues like following.
...