我有一个运行在CDH 5.13中的Spark流(Scala)应用程序,它使用来自客户端0.10.0的来自Kafka的消息。我的Kafka集群包含3个经纪人。 Kafka主题分为12个分区,在这3个代理之间平均分配。我的Spark流使用者有12个执行器,每个执行器具有1个核心。 Spark流式传输开始在每批中读取来自Kafka的数百万条消息,但由于Spark无法处理负载并创建了未处理的批处理队列,因此将其数量减少到数千。很好,但是我希望Spark能够非常快速地处理小批量并恢复正常,但是我看到,不时处理仅几百条消息的执行程序之一在阅读完后便会收到“请求超时”错误。与Kafka的最后偏移:
DEBUG org.apache.clients.NetworkClient Disconnecting from node 12345 due to request timeout
此错误发生后,执行程序将发送多个RPC请求驱动程序,这些驱动程序大约需要40秒,并且此后执行程序重新连接到与其断开连接的同一代理。
我的问题是如何防止此请求超时,什么是找到此请求根本原因的最佳方法是什么?
谢谢
答案 0 :(得分:0)
断开连接的根本原因是来自卡夫卡的数据请求响应来得太迟。即在request.timeout.ms
参数之后,该参数设置为默认40000毫秒。当我增加此值时,断开连接的问题已解决。