spark streaming+kafka调优

问题1:Kafka Topic ISR不全

Leader会跟踪与其保持同步的Replica列表,该列表称为ISR(即in-sync Replica)。如果一个Follower宕机,或者落后太多,Leader将把它从ISR中移除。这里所描述的“落后太多”指Follower复制的消息落后于Leader后的条数超过预定值(该值通过replica.lag.max.messages配置,其默认值是4000)或者Follower超过一定时间(该值通过replica.lag.time.max.ms来配置,其默认值是10000)未向Leader发送fetch请求。

解决方法

将下面几个参数适当增大:
replicas响应leader的最长等待时间,若是超过这个时间,就将replicas排除在管理之外

replica.lag.time.max.ms = 1000000ms (默认10000ms)

如果relicas落后太多,将会认为此partition relicas已经失效。而一般情况下,因为网络延迟等原因,总会导致replicas中消息同步滞后。如果消息严重滞后,leader将认为此relicas网络延迟较大或者消息吞吐能力有限。在broker数量较少,或者网络不足的环境中,建议提高此值.

replica.lag.max.messages = 100000 (默认4000)

leader中进行复制的线程数,增大这个数值会增加relipca的IO

num.replica.fetchers = 2 (默认1)

replicas每次获取数据的最大字节数

replica.fetch.max.bytes = 10M (默认10M)

问题2:topic1和topic2分区都为20,只分布在3个broker点上,其余6个broker空闲

解决方法

增加topic1分区数为50,topic2分区数为100,分区均匀分布在9个broker上,观察Spark Streaming程序并行度增大,处理效率提高,延迟明显变小。
增加topic分区数命令,将topic t_topic1分区数增大到50个分区:

kafka-topics --zookeeper node01:2181 --alter --topic t_topic1 --partitions 50

问题3:java.lang.AssertionError:assertion failed: Failed to get records for spark-executor-group t_topic1 after polling for 512

Spark Streaming程序报同一个stage的某些task获取不到数据超时后失败

解决方法

适当增大spark.streaming.kafka.consumer.poll.ms=1000 (默认512)

平台业务运行恢复正常。

参考

http://www.cnblogs.com/wangb0402/p/6221626.html
https://community.mapr.com/thread/18619-problems-with-spark-161-1607
http://kafka.apache.org/documentation/#configuration

你可能感兴趣的:(spark streaming+kafka调优)