Skip to content

Commit 9041190

Browse files
committed
LZ4 support in kafka 0.8/0.9 does not accept a ContentSize header
1 parent 43820df commit 9041190

File tree

1 file changed

+12
-2
lines changed

1 file changed

+12
-2
lines changed

kafka/codec.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -233,17 +233,27 @@ def lz4_encode_old_kafka(payload):
233233
flg = data[4]
234234
else:
235235
flg = ord(data[4])
236+
236237
content_size_bit = ((flg >> 3) & 1)
237238
if content_size_bit:
238-
header_size += 8
239+
# Old kafka does not accept the content-size field
240+
# so we need to discard it and reset the header flag
241+
flg -= 8
242+
if isinstance(data[4], int):
243+
data[4] = flg
244+
else:
245+
data = data[0:4] + chr(flg) + data[5:]
246+
payload = data[header_size+8:]
247+
else:
248+
payload = data[header_size:]
239249

240250
# This is the incorrect hc
241251
hc = xxhash.xxh32(data[0:header_size-1]).digest()[-2:-1] # pylint: disable-msg=no-member
242252

243253
return b''.join([
244254
data[0:header_size-1],
245255
hc,
246-
data[header_size:]
256+
payload
247257
])
248258

249259

0 commit comments

Comments
 (0)