docs: def publish(self, topic, messages, key=None):
          """Takes messages and puts them on the supplied kafka topic
  
          """
  
          if not isinstance(messages, list):
              messages = [messages]
  
          first = True
          success = False
          if key is None:
              key = int(time.time() * 1000)
  
          messages = [encodeutils.to_utf8(m) for m in messages]
  
          key = bytes(str(key), 'utf-8') if PY3 else str(key)
  
          while not success:
              try:
                  self._producer.send_messages(topic, key, *messages)
                  success = True
              except Exception:
                  if first:
                      # This is a warning because of all the other warning and
                      # error messages that are logged in this case. This way
                      # someone looking at the log file can see the retry
                      log.warn("Failed send on topic {}, clear metadata and retry"
                               .format(topic))
  
                      # If Kafka is running in Kubernetes, the cached metadata
                      # contains the IP Address of the Kafka pod. If the Kafka
                      # pod has restarted, the IP Address will have changed
                      # which would have caused the first publish to fail. So,
                      # clear the cached metadata and retry the publish
                      self._kafka.reset_topic_metadata(topic)
                      first = False
                      continue
                  log.exception('Error publishing to {} topic.'.format(topic))
                  raise