docs: def next(self):
          """Return the next available message
  
          Blocks indefinitely unless consumer_timeout_ms > 0
  
          Returns:
              a single KafkaMessage from the message iterator
  
          Raises:
              ConsumerTimeout after consumer_timeout_ms and no message
  
          Note:
              This is also the method called internally during iteration
  
          """
          self._set_consumer_timeout_start()
          while True:
  
              try:
                  return six.next(self._get_message_iterator())
  
              # Handle batch completion
              except StopIteration:
                  self._reset_message_iterator()
  
              self._check_consumer_timeout()