1515from kafka .protocol .fetch import FetchRequest
1616from kafka .protocol .message import PartialMessage
1717from kafka .protocol .offset import OffsetRequest , OffsetResetStrategy
18+ from kafka .serializer import Deserializer
1819from kafka .structs import TopicPartition
1920
2021log = logging .getLogger (__name__ )
@@ -507,15 +508,25 @@ def _unpack_message_set(self, tp, messages):
507508 if absolute_base_offset >= 0 :
508509 inner_offset += absolute_base_offset
509510
510- key , value = self ._deserialize (inner_msg )
511+ key = self ._deserialize (
512+ self .config ['key_deserializer' ],
513+ tp .topic , inner_msg .key )
514+ value = self ._deserialize (
515+ self .config ['value_deserializer' ],
516+ tp .topic , inner_msg .value )
511517 yield ConsumerRecord (tp .topic , tp .partition , inner_offset ,
512518 inner_timestamp , msg .timestamp_type ,
513519 key , value , inner_msg .crc ,
514520 len (inner_msg .key ) if inner_msg .key is not None else - 1 ,
515521 len (inner_msg .value ) if inner_msg .value is not None else - 1 )
516522
517523 else :
518- key , value = self ._deserialize (msg )
524+ key = self ._deserialize (
525+ self .config ['key_deserializer' ],
526+ tp .topic , msg .key )
527+ value = self ._deserialize (
528+ self .config ['value_deserializer' ],
529+ tp .topic , msg .value )
519530 yield ConsumerRecord (tp .topic , tp .partition , offset ,
520531 msg .timestamp , msg .timestamp_type ,
521532 key , value , msg .crc ,
@@ -541,16 +552,12 @@ def __next__(self):
541552 self ._iterator = None
542553 raise
543554
544- def _deserialize (self , msg ):
545- if self .config ['key_deserializer' ]:
546- key = self .config ['key_deserializer' ](msg .key ) # pylint: disable-msg=not-callable
547- else :
548- key = msg .key
549- if self .config ['value_deserializer' ]:
550- value = self .config ['value_deserializer' ](msg .value ) # pylint: disable-msg=not-callable
551- else :
552- value = msg .value
553- return key , value
555+ def _deserialize (self , f , topic , bytes_ ):
556+ if not f :
557+ return bytes_
558+ if isinstance (f , Deserializer ):
559+ return f .deserialize (topic , bytes_ )
560+ return f (bytes_ )
554561
555562 def _send_offset_request (self , partition , timestamp ):
556563 """Fetch a single offset before the given timestamp for the partition.
0 commit comments