62
62
)
63
63
from kafka .errors import CorruptRecordException , UnsupportedCodecError
64
64
from kafka .codec import (
65
- gzip_encode , snappy_encode , lz4_encode ,
66
- gzip_decode , snappy_decode , lz4_decode
65
+ gzip_encode , snappy_encode , lz4_encode , zstd_encode ,
66
+ gzip_decode , snappy_decode , lz4_decode , zstd_decode
67
67
)
68
68
import kafka .codec as codecs
69
69
@@ -97,6 +97,7 @@ class DefaultRecordBase(object):
97
97
CODEC_GZIP = 0x01
98
98
CODEC_SNAPPY = 0x02
99
99
CODEC_LZ4 = 0x03
100
+ CODEC_ZSTD = 0x04
100
101
TIMESTAMP_TYPE_MASK = 0x08
101
102
TRANSACTIONAL_MASK = 0x10
102
103
CONTROL_MASK = 0x20
@@ -111,6 +112,8 @@ def _assert_has_codec(self, compression_type):
111
112
checker , name = codecs .has_snappy , "snappy"
112
113
elif compression_type == self .CODEC_LZ4 :
113
114
checker , name = codecs .has_lz4 , "lz4"
115
+ elif compression_type == self .CODEC_ZSTD :
116
+ checker , name = codecs .has_zstd , "zstd"
114
117
if not checker ():
115
118
raise UnsupportedCodecError (
116
119
"Libraries for {} compression codec not found" .format (name ))
@@ -185,6 +188,8 @@ def _maybe_uncompress(self):
185
188
uncompressed = snappy_decode (data .tobytes ())
186
189
if compression_type == self .CODEC_LZ4 :
187
190
uncompressed = lz4_decode (data .tobytes ())
191
+ if compression_type == self .CODEC_ZSTD :
192
+ uncompressed = zstd_decode (data .tobytes ())
188
193
self ._buffer = bytearray (uncompressed )
189
194
self ._pos = 0
190
195
self ._decompressed = True
@@ -517,6 +522,8 @@ def _maybe_compress(self):
517
522
compressed = snappy_encode (data )
518
523
elif self ._compression_type == self .CODEC_LZ4 :
519
524
compressed = lz4_encode (data )
525
+ elif self ._compression_type == self .CODEC_ZSTD :
526
+ compressed = zstd_encode (data )
520
527
compressed_size = len (compressed )
521
528
if len (data ) <= compressed_size :
522
529
# We did not get any benefit from compression, lets send
0 commit comments