我们有一个基于spark structured streaming 2.4.6的应用程序,读取Kafka主题,根据用户配置(高度灵活和可定制)进行一些计算或聚合,并写入Kafka和kairosdb。它在k8s上运行。
现在,在我们的测试中,配置驱动大约140个流式查询,有3个执行器,每个执行器都有3g内存和3g内存开销,它每5分钟处理大约77kb的传入数据(一个小摄取率测试)。但遗嘱执行人将在8小时内被杀。下面是驱动程序的错误日志:
TaskSchedulerImpl: Lost executor 3 on 192.168.36.255: Executor heartbeat timed out after 122093 ms TaskSchedulerImpl: Lost executor 3 on 192.168.36.255: The executor with id 3 was deleted by a user or the framework.
执行者的最后日志如下: TaskMemoryManager: Failed to allocate a page (33554432 bytes), try again.
然后,我密切监视着记忆。我观察到自由堆图表中的自由堆有明显的下降趋势(最后下降到只有200m),而kafka common和client包中的一些对象的计数(对象计数图表)有上升趋势。在最后的堆转储中,除了jdk对象之外,剩下的大多数对象都来自kafka common和client包。样本为: org.apache.kafka.common.MetricName
org.apache.kafka.common.metrics.KafkaMetric org.apache.kafka.common.metrics.Sensor
org.apache.kafka.common.metrics.stats.SampledStat$Sample org.apache.kafka.clients.ApiVersion
在我看来,spark structured streaming/kafka中有一个小内存泄漏。是sss的错误还是Kafka的错误?以前有没有人遇到过类似的问题?有人能就如何解决这个问题提出一些建议吗?
暂无答案!
目前还没有任何答案,快来回答吧!