簡體   English   中英

Apache Flink 流縮放

[英]Apache Flink stream scaling

我是 Apache Flink 的新手,我正在嘗試了解一些關於將 Flink 流作業與 Kafka 一起擴展的最佳實踐。 我無法找到合適答案的一些問題包括:

  1. 您可以/應該運行多少個流媒體作業? 運行過多流是否存在可擴展性問題? 多少是太多?
  2. 如果我們確實運行了 2,000 個流來滿足業務需求,那么管理這些流的最佳方法是什么?
  3. 從一個流讀取流數據到另一個流的首選方法是什么? 我們可以加入流,執行連續查詢等嗎?

預先感謝您的任何支持,如果這些問題看起來有些基本,我深表歉意,但我正在努力更好地處理這項技術。 我已經閱讀了大部分文檔,但不可否認,由於我在這方面缺乏經驗,可能沒有將一些概念放在一起。 謝謝你的幫助!

  • 流的數量沒有限制,flink 將根據作業管理器/任務管理器的內存/CPU、正在使用的並行化和插槽數進行擴展。 我使用 YARN 來管理資源。 如果連接的流數量很高,那么我們需要謹慎一點,不要在某些任務管理器上進行所有/大部分處理,因為這會減慢進程。 由於某些任務管理器負載過重,kafka 流本身可能存在滯后或內部滯后,這肯定會出現,並且需要為此實施預防性檢查。

  • 連續查詢支持已作為最新 flink 版本的一部分構建,您可以查看 flink 文檔。

  • 如果通過將一個數據流讀取到另一個數據流意味着在 flink 術語中連接兩個流,那么我們可以將它們連接到一個公共鍵上並維護一個值狀態。 請注意,值狀態在任務管理器中維護,不會在任務管理器之間共享。 否則,如果您暗示兩個或多個流的聯合,那么我們可以構建平面映射函數,以使來自此類流的數據采用標准格式。

    聯合示例:

val stream1: DataStream[UserBookingEvent] = BookingClosure.getSource(runmode).getSource(env)
      .map(new ClosureMapFunction)

val stream2: DataStream[UserBookingEvent] = BookingCancel.getSource(runmode).getSource(env)
      .map(new CancelMapFunction)

val unionStream: DataStream[UserBookingEvent] = stream1.union(stream2)

---

import org.apache.flink.api.common.functions.MapFunction
import org.json4s.jackson.JsonMethods.{parse => _, parseOpt => _}
import org.json4s.native.JsonMethods._
import org.slf4j.{Logger, LoggerFactory}

class CancelMapFunction extends MapFunction[String, Option[UserBookingEvent]] {
  override def map(in: String): Option[UserBookingEvent] = {
    val LOG: Logger = LoggerFactory.getLogger(classOf[CancelMapFunction])
    try {
      implicit lazy val formats = org.json4s.DefaultFormats

      val json = parse(in)
      ..............
     } catch {
      case e: Exception => {
        LOG.error("Could not parse Cancel Event= " + in + e.getMessage)
        None
      }
    }
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM