Describe the bug
More an improvement than a bug, but
ConsumerBase and ProducerImpl use System.currentTimeMillis() to measure the elapsed time in the 'operations' inner classes (ConsumerBase$OpBatchReceive and ProducerImpl$OpSendMsg).
An instance variable createdAt is initialized with System.currentTimeMills(), but it is not used for reading wall clock time, the variable is only used for computing elapsed time (e.g. timeout for a batch).
When the variable is used to compute elapsed time, it would more sense to use System.nanoTime().