I think is the fact that is 60 million records, and Java to represent in HashMap is using heap memory which is around 50bytes per record maybe. Also the GC safe around 10% extra of the consumed heap, even I have old gen practically the 90% of my heap.
I'm exploring Chornicle Map https://github.com/OpenHFT/Chronicle-Map to replace the internal map of Kafka stream by this one which is base in off-heap