Spark Streaming 与 Kafka 集成分析

2. 数据默认就被分布到了多个Executor上。Receiver-based Approach 你需要做特定的

处理,才能让 Receiver分不到多个Executor上。 3. Receiver-based Approach 的方式,一旦你的Batch Processing 被delay了,或者被delay

了很多个batch,那估计你的Spark Streaming程序离奔溃也就不远了。 Direct Approach (No Receivers) 则完全不会存在类似问题。就算你delay了很多个batch time,你内存中的数据只有这次处理的。 4. Direct Approach (No Receivers) 直接维护了 Kafka offset,可以保证数据只有被执行

成功了,才会被记录下来,透过 checkpoint机制。如果采用Receiver-based

Approach,消费Kafka和数据处理是被分开的,这样就很不好做容错机制,比如系统当掉了。所以你需要开启WAL,但是开启WAL带来一个问题是,数据量很大,对HDFS是个很大的负担,而且也会对实时程序带来比较大延迟。 我原先以为Direct Approach 因为只有在计算的时候才拉取数据,可能会比Receiver-based Approach 的方式慢,但是经过我自己的实际测试,总体性能 Direct Approach会更快些,因为Receiver-based Approach可能会有较大的内存隐患,GC也会影响整体处理速度。

如何保证数据接受的可靠性

SS 自身可以做到 at least once 语义,具体方式是通过CheckPoint机制。 * CheckPoint 机制 *

CheckPoint 会涉及到一些类,以及他们之间的关系:

DStreamGraph类负责生成任务执行图,而JobGenerator则是任务真实的提交者。任务的

数据源则来源于DirectKafkaInputDStream,checkPoint 一些相关信息则是由类DirectKafkaInputDStreamCheckpointData 负责。

好像涉及的类有点多,其实没关系,我们完全可以不用关心他们。先看看checkpoint都干了些啥,checkpoint 其实就序列化了一个类而已:

org.apache.spark.streaming.Checkpoint

看看类成员都有哪些:

val master = ssc.sc.master val framework = ssc.sc.appName val jars = ssc.sc.jars val graph = ssc.graph

val checkpointDir = ssc.checkpointDir

val checkpointDuration = ssc.checkpointDurationval pendingTimes = ssc.scheduler.getPendingTimes().toArray

val delaySeconds = MetadataCleaner.getDelaySeconds(ssc.conf)

val sparkConfPairs = ssc.conf.getAll

? ? ? ? ? ? ? ? 1 2 3 4 5 6 7 8 其他的都比较容易理解,最重要的是 graph,该类全路径名是:

org.apache.spark.streaming.DStreamGraph

里面有两个核心的数据结构是:

private val inputStreams = new ArrayBuffer[InputDStream[_]]()

private val outputStreams = new ArrayBuffer[DStream[_]]()

? ? 1 2 inputStr

>>闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧湱鈧懓瀚崳纾嬨亹閹烘垹鍊炲銈嗗笒椤︿即寮查鍫熷仭婵犲﹤鍟扮粻缁橆殽閻愭潙鐏村┑顔瑰亾闂侀潧鐗嗛幊鎰邦敊婵犲倵鏀介幒鎶藉磹閹版澘纾婚柟鎯у濡垶鏌熼鍡楃灱閸氬姊洪崫鍕効缂傚秳绶氶悰顕€宕堕澶嬫櫖闂佹寧绻傚Λ宀勫箰閸涱喚绡€闁汇垽娼ф禒婊勪繆椤栨熬鏀荤紒鍌氱Т楗即宕煎┑鍫О闂備線鈧偛鑻晶顔姐亜椤忓嫬鏆e┑鈥崇埣瀹曞崬螖閳ь剝銆栫紓鍌氬€搁崐鍝ョ矓閺夋嚦娑樜旈埀顒勬偝婵犳艾閿ゆ俊銈勭娴滄粓姊虹粙璺ㄧ闁汇劎鍏橀獮蹇涙惞閸︻厾锛滅紓鍌欓檷閸ㄥ綊鐛弽顓熺厵闁告劘灏欑粻娲煏閸ャ劌濮屾い锕€顕槐鎺撴綇閵娿儲璇為梺璇″枓閺呯姴鐣峰鈧幊鐘活敄閹稿骸浜濈紓鍌氬€搁崐椋庢閿熺姴绐楅柡宥庡幗閸嬪鏌熼幆褏锛嶉柡鍡畵閺岀喖鎮滃鍡樼暦闂佺ǹ锕﹂崗姗€骞冨Δ鍛仺闁谎嗩嚙濠€閬嶅极椤曗偓楠炲棜顦柡鈧禒瀣厽婵☆垵娅f禒娑㈡煛閸″繑娅呴柍瑙勫灴椤㈡瑧鍠婇崡鐐搭啀闂備胶鎳撶粻宥夊垂绾懐浜藉┑鐐存尰閸戝綊宕归幎钘夌劦妞ゆ帒鍟悡鎰版煏閸パ冾伃鐎殿喗娼欒灃闁逞屽墯缁傚秵銈i崘鈹炬嫼闂佸憡绻傜€氼噣鎮炵捄銊х<闁哄被鍎抽悾鐑橆殽閻愬弶顥㈢€殿噮鍣e畷濂割敃閿濆棙鐝┑鐘垫暩閸嬬偤宕归崼鏇熸櫇闁冲搫鍊搁閬嶆煥閻曞倹瀚�<<
12@gma联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4