async produce({
    topicData,
    transactionalId,
    producerId,
    producerEpoch,
    acks = -1,
    timeout = 30000,
    compression = Compression.None,
  }) {
    const produce = this.lookupRequest(apiKeys.Produce, requests.Produce)
    return await this[PRIVATE.SEND_REQUEST](
      produce({
        acks,
        timeout,
        compression,
        topicData,
        transactionalId,
        producerId,
        producerEpoch,
      })
    )
  }
@public
@param {Object} request
@param {Array} request.topicData An array of messages per topic and per partition, example:
                         [
                           {
                             topic: 'test-topic-1',
                             partitions: [
                               {
                                 partition: 0,
                                 firstSequence: 0,
                                 messages: [
                                   { key: '1', value: 'A' },
                                   { key: '2', value: 'B' },
                                 ]
                               },
                               {
                                 partition: 1,
                                 firstSequence: 0,
                                 messages: [
                                   { key: '3', value: 'C' },
                                 ]
                               }
                             ]
                           },
                           {
                             topic: 'test-topic-2',
                             partitions: [
                               {
                                 partition: 4,
                                 firstSequence: 0,
                                 messages: [
                                   { key: '32', value: 'E' },
                                 ]
                               },
                             ]
                           },
                         ]
@param {number} [request.acks=-1] Control the number of required acks.
                          -1 = all replicas must acknowledge
                           0 = no acknowledgments
                           1 = only waits for the leader to acknowledge
@param {number} [request.timeout=30000] The time to await a response in ms
@param {string} [request.transactionalId=null]
@param {number} [request.producerId=-1] Broker assigned producerId
@param {number} [request.producerEpoch=0] Broker assigned producerEpoch
@param {import("../../types").CompressionTypes} [request.compression=CompressionTypes.None] Compression codec
@returns {Promise}