Flink作業(yè)反壓處理
簡(jiǎn)介 反壓(backpressure)是實(shí)時(shí)計算應用開(kāi)發(fā)中,特別是流式計算中,十分常見(jiàn)的問(wèn)題。反壓意味著(zhù)數據管道中某個(gè)節點(diǎn)成為 瓶頸,處理速率跟不上上游發(fā)送數據的速率,而需要對上游進(jìn)行限速。由于實(shí)時(shí)計算應用通常使用消息隊列來(lái)進(jìn)行生產(chǎn)端和 消費端的解耦,消費端數據源是 pull-based 的,所以反壓通常是從某個(gè)節點(diǎn)傳導至數據源并降低數據源(比如 Kafka consumer)的攝入速率。 簡(jiǎn)單來(lái)說(shuō),Flink 拓撲中每個(gè)節點(diǎn)(Task)間的數據都以阻塞隊列的方式傳輸,下游來(lái)不及消費導致隊列被占滿(mǎn)后,上游的 生產(chǎn)也會(huì )被阻塞,最終導致數據源的攝入被阻塞。 TCP-based 反壓的弊端 單個(gè)Task導致的反壓,會(huì )阻斷整個(gè)TM-TM之間的socket,連checkpoint barries也無(wú)法發(fā)出。 反壓傳播路徑長(cháng),導致生效時(shí)延較大。 Credit-based 反壓 反壓過(guò)程簡(jiǎn)介 如圖所示在 Flink 層面實(shí)現反壓機制,就是每一次 ResultSubPartition 向 InputChannel 發(fā)送消息的時(shí)候都會(huì )發(fā)送一個(gè) backlog size 告訴下游準備發(fā)送多少消息,下....