function doProduce(v, k) {
    try {
      var r = self._oldProduce(topic, partition,
        v, k,
        timestamp, opaque, headers);

      self._hl.deliveryEmitter.once(opaque.__message_id, function(err, offset) {
        self._hl.pollingRef.decrement();
        setImmediate(function() {
          // Offset must be greater than or equal to 0 otherwise it is a null offset
          // Possibly because we have acks off
          callback(err, offset >= 0 ? offset : null);
        });
      });

      return r;
    } catch (e) {
      callback(e);
    }
  }
Produce a message to Kafka asynchronously.

This is the method mainly used in this class. Use it to produce
a message to Kafka.

When this is sent off, and you recieve your callback, the assurances afforded
to you will be equal to those provided by your ack level.

@param {string} topic - The topic name to produce to.
@param {number|null} partition - The partition number to produce to.
@param {Buffer|null} message - The message to produce.
@param {string} key - The key associated with the message.
@param {number|null} timestamp - Timestamp to send with the message.
@param {object} headers - A list of custom key value pairs that provide message metadata.
@param {function} callback - Callback to call when the delivery report is recieved.
@throws {LibrdKafkaError} - Throws a librdkafka error if it failed.
@return {boolean} - returns an error if it failed, or true if not
@see Producer#produce