// EndTxnRequest ends a transaction. This should be called after
// TxnOffsetCommitRequest.
EndTxnRequest => key 26, max version 3, flexible v3+, txn coordinator
  // TransactionalID is the transactional ID to use for this request.
  TransactionalID: string
  // ProducerID is the producer ID of the client for this transactional ID
  // as received from InitProducerID.
  ProducerID: int64
  // ProducerEpoch is the producer epoch of the client for this transactional ID
  // as received from InitProducerID.
  ProducerEpoch: int16
  // Commit is whether to commit this transaction: true for yes, false for abort.
  Commit: bool

// EndTxnResponse is a response for an EndTxnRequest.
EndTxnResponse =>
  ThrottleMillis(1)
  // ErrorCode is any error for this topic/partition commit.
  //
  // TRANSACTIONAL_ID_AUTHORIZATION_FAILED is returned if the client is
  // not authorized for write with transactional IDs with the requested
  // transactional ID.
  //
  // INVALID_REQUEST is returned if the transactional ID is invalid.
  //
  // INVALID_PRODUCER_ID_MAPPING is returned if the produce request used
  // a producer ID that is not tied to the transactional ID (i.e., mismatch
  // from what was returned from InitProducerID).
  //
  // INVALID_PRODUCER_EPOCH is returned if the requested epoch does not match
  // the broker epoch for this transactional ID.
  //
  // CONCURRENT_TRANSACTIONS is returned if there is an ongoing transaction for
  // this transactional ID, if the producer ID and epoch matches the broker's.
  //
  // INVALID_TXN_STATE is returned if this request is attempted at the wrong
  // time (given the order of how transaction requests should go).
  ErrorCode: int16
