在接收来自 Kafka 的消息期间,当我使用
Map.of()
创建空映射时,可能会导致内存泄漏或更密集的 CPU 使用?
可以有多个侦听器,但有两种类型 - 一种接收标头:
@KafkaListener(...)
public void processMessage(String message,
ConsumerRecordMetadata metadata,
@Header(name = ID, required = false) String id,
@Header(name = TIME, required = false) String time) {
var headers = Map.of(ID, id, TIME, time);
...
}
还有一个,没有标题:
@KafkaListener(...)
public void processMessage(String message,
ConsumerRecordMetadata metadata) {
var headers = Map.of();
...
}
然后在更抽象的层面上,我检查是否有标头,但我认为情况并非如此 - 正如标题所示,是否有可能如果消息流量增加,CPU 可能会受到限制?
是的,这正在发生:|
没有理由相信一个空的 Map 可能会导致不止一个保存数据的内存泄漏。
内存泄漏也不会直接导致 cpu 节流(耗尽所有堆内存,因此泄漏最终会导致这种情况)。
您应该在得出结论之前评估问题。
检查 GC 统计数据,看看您的内存是否曾经增加,或者如果您有 GC 周期的其他问题,那么您可以尝试找出问题的原因。