Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Lazy initialization for RecordHeader was introduced in KAFKA-10438, improving performance but also creating unexpected side effects.
Since the Consumer is not thread-safe, the same assumption naturally extends to ConsumerRecord. However, users often assume that read-only access across threads is safe.
With lazy initialization, this assumption no longer holds, which can lead to unexpected behavior.
So far, three concurrency-related issues (KAFKA-12999, KAFKA-17725, KAFKA-18470) have been reported in connection with RecordHeader data access.
We can make RecordHeader thread-safe to ensure that users accessing it have thread-safety guarantees when accessing RecordHeader in a read-only manner do not encounter , rather than risking a NullPointerException. 
(Note that because the Consumer is not thread-safe, if other threads can modify the RecordHeader through the Consumer, its thread-safety can no longer be guaranteed.)

...